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

时间:2017-09-17 18:50:28

标签: php sql postgresql pdo prepared-statement

我使用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);

1 个答案:

答案 0 :(得分:3)

正如您在this链接上看到的那样,PDO的execute方法按定义返回布尔值。

我会推荐这种方法:

$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