2017-09-17 3 views
1

私はPostgreSQLとPHPを使用して多くのSQL文を使用していますが、その多くは 'WHERE'節に変数を持っています。私は、INSERTとUPDATEのためにうまく実行するために準備された文を得ることができますが、WHERE節に変数を持つSELECT文では動作させることはできません。私は成功のための答えのためにGoogleを洗った。下記の例をご覧ください。これは、bankrecというテーブルから最近調整された銀行残高を選択するためです。私は何が欠けていますか?私はこれを実行するとWHERE句にパラメータをバインドできませんPDO

$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); 
+1

をチェーンしないでください。 '$ rec-> fetch(PDO :: FETCH_ASSOC);'を実行すると 'bool'が返されます。 –

+0

@LawrenceCheroneそれは簡単な修正でした!それは動作します! INSERTとUPDATEのようにチェーン化できますが、SELECTではできません。どうもありがとうございました! – AppreciateCo

+0

@AppreciateCo 'execute()'はブール値を返し、 'query()'はメソッド連鎖を可能にする 'PDOStatement'を返します。 – ishegg

答えて

3

あなたはPDOのexecuteメソッドが定義によってブール値を返しますthisリンク上で見ることができるように。あなたは、クエリが実行されsucessfullyかどうかを決定するために、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 
} 

私はこのアプローチをお勧めします。また、結果を複数行取り出す必要がある場合は、http://php.net/manual/en/pdostatement.fetchall.php

+1

ありがとうDimitrios。あなたは基本的にローレンスと同じことを言った。私は答えとしてコメントをマークすることはできませんので、私はあなたにマークしました。お二人のおかげです。 – AppreciateCo

関連する問題