Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法将参数绑定到WHERE子句PDO_Php_Sql_Postgresql_Pdo_Prepared Statement - Fatal编程技术网

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

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

我使用了大量使用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方法根据定义返回布尔值

我建议采取这种做法:

$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。你说的基本上和劳伦斯一样。我无法将评论标记为答案,所以我标记了你的。谢谢你们两位。