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