[英]Can't bind parameters to WHERE clause PDO
我使用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
方法按定義返回boolean。
我會推薦這種方法:
$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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.