繁体   English   中英

无法将参数绑定到WHERE子句PDO

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM