【发布时间】:2018-02-26 07:21:08
【问题描述】:
我使用了很多使用 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);
【问题讨论】:
-
不要链接它,它应该是
$rec->fetch(PDO::FETCH_ASSOC);,但执行返回bool -
@LawrenceCherone 嗯,这是一个简单的修复!这样可行!为什么我可以像这样为 INSERT 和 UPDATE 而不是 SELECT 链接它?非常感谢!
-
@AppreciateCo
execute()返回一个布尔值,而query()返回一个PDOStatement,它允许您进行方法链接。
标签: php sql postgresql pdo prepared-statement