[英]Can't bind parameters to WHERE clause PDO
我使用PostgreSQL和PHP使用了很多sql语句,其中很多都在'WHERE'子句中有变量。 我可以获得准备好的语句来执行INSERT和UPDATE,但是我不能使它适用于WHERE子句中带变量的SELECT语句。 我已经搜索谷歌的答案没有成功。 请看下面的例子。 这是从名为bankrec的表中选择最近的对帐银行余额。 我错过了什么?
$rec = $dbh->prepare('SELECT clearedbal FROM bankrec WHERE bankno = :bankno ');
$result = $rec->execute(['bankno'=>$bankno])->fetch(PDO::FETCH_ASSOC);
当我运行这个时,我得到:
"Fatal error: Call to a member function fetch() on boolean"
但是,我知道查询是正确的,因为只是在没有预准备语句的情况下运行查询会得到我想要的结果,但它很容易受到sql注入:
$rec = $dbh->query("SELECT clearedbal FROM bankrec WHERE bankno = '$bankno' ")->fetch(PDO::FETCH_ASSOC);
正如您在此链接中看到的那样,PDO的execute
方法按定义返回boolean。
我会推荐这种方法:
$rec = $dbh->prepare('SELECT clearedbal FROM bankrec WHERE bankno = :bankno ');
if($rec->execute(['bankno'=>$bankno])){
$result=$rec->fetch(PDO::FETCH_ASSOC);
//do another stuff there
} else {
//Query failed handle error
}
如您所见,您可以使用execute
来确定查询是否成功执行。 此外,如果您需要获取多行结果,则应使用fetchAll
方法: http : //php.net/manual/en/pdostatement.fetchall.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.