2010-06-13 88 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