2010-06-13 93 views
2

當您需要將一個值同時與幾個列匹配時,我在理解如何使用預準備語句時遇到了一些麻煩。WHERE子句與PDO混淆

換句話說什麼,而不是這樣做:

$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); 
$stmt->bindParam(1, $name); 

我想做到這一點: '?'

$stmt = $dbh->prepare("SELECT * FROM REGISTRY where firstname = ? or lastname = ?"); 

既代表相同的字符串。

回答

4

嘗試...

$stmt = $dbh->prepare("SELECT * FROM registry WHERE firstname = :name OR lastname = :name;"); 
$stmt->bindParam(':name', $name); 
+0

太感謝您了! – Greg 2010-06-13 01:14:19

1

爲什麼不直接使用一個命名參數:

$stmt = $dbh->prepare("SELECT * FROM REGISTRY WHERE firstname = :name OR lastname = :name"); 
$stmt->bindParam(':name', $name); 
0
$stmt = $dbh->prepare("SELECT * FROM registry WHERE firstname = ? 
OR lastname = ? ;"); 
$stmt->bindParam(1, $name); 
+1

感謝您使用此代碼段,這可能會提供一些即時幫助。通過展示*爲什麼*這是一個很好的解決方案,對未來的讀者會有更好的解決方案,這將爲它的教育價值提供一個合適的解釋[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。特別是,這如何綁定兩個佔位符,而不僅僅是第一個? – 2017-08-01 12:39:31