Php 无法将参数绑定到WHERE子句PDO
我使用了大量使用PostgreSQL和PHP的sql语句,其中许多语句的“WHERE”子句中都有变量。对于INSERT和UPDATE,我可以让准备好的语句很好地执行,但对于WHERE子句中带有变量的SELECT语句,我无法让它工作。我在谷歌搜索答案,但没有成功。请看下面的例子。这是从名为bankrec的表中选择最近对账的银行余额。我错过了什么Php 无法将参数绑定到WHERE子句PDO,php,sql,postgresql,pdo,prepared-statement,Php,Sql,Postgresql,Pdo,Prepared Statement,我使用了大量使用PostgreSQL和PHP的sql语句,其中许多语句的“WHERE”子句中都有变量。对于INSERT和UPDATE,我可以让准备好的语句很好地执行,但对于WHERE子句中带有变量的SELECT语句,我无法让它工作。我在谷歌搜索答案,但没有成功。请看下面的例子。这是从名为bankrec的表中选择最近对账的银行余额。我错过了什么 $rec = $dbh->prepare('SELECT clearedbal FROM bankrec WHERE bankno = :bankn
$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方法根据定义返回布尔值
我建议采取这种做法:
$rec=$dbh->准备“从bankrec中选择clearedbal,其中bankno=:bankno”;
如果$rec->执行['bankno'=>$bankno]{
$result=$rec->fetchPDO::FETCH_ASSOC;
//在那里做另一件事
}否则{
//查询失败处理错误
}
如您所见,您可以使用execute来确定查询是否成功执行。此外,如果需要获取多行结果,则应使用fetchAll方法:不要将其链接,它应为$rec->fetchPDO::fetch_ASSOC;但是执行返回bool@LawrenceCherone这是一个简单的解决方案!真管用!为什么我可以像插入和更新那样链接它,而不是选择?多谢各位@ApprecateCo execute返回一个布尔值,而query返回一个PDO语句,这允许您进行方法链接。谢谢Dimitrios。你说的基本上和劳伦斯一样。我无法将评论标记为答案,所以我标记了你的。谢谢你们两位。