2012-04-19 13 views
0

私はPDOと準備されたステートメントを初めて使います。なぜ、この仕事を行います。PHP PDO準備文とプレースホルダを把握しようとしています。 MySQLステートメントのIN句のプレースホルダ

$sth = $dbh->prepare("SELECT * 
         FROM skyrim_ingredients 
         WHERE ing_name 
         IN ('blue butterfly wing', 'blue dartwing', 'blue mountain flower');"); 
while($row = $sth->fetch()) { 
    echo $row['ing_id']; 
} 

が...しかし、これはない:

$ing_string = 'blue butterfly wing', 'blue dartwing', 'blue mountain flower'; 
$sth = $dbh->prepare("SELECT * 
         FROM skyrim_ingredients 
         WHERE ing_name 
         IN (?);"); 
$sth->bindParam(1, $ing_string); 
$sth->execute(); 
while($row = $sth->fetch()) { 
    echo $row['ing_id']; 
} 

私はあなたがテーブルまたは列のパラメータを使用傾けることを読んで、これはあまりにも、IN句の場合ですか?

+2

この回答を参照すると、正確な問題が説明されています。http://stackoverflow.com/questions/920353/php-pdo-can-i-bind-an-array-to-an-in-condition tho '$ ing_string'を配列に変更する必要があります –

+0

これは私が使い終わった解決策です。ありがとう – pdizz

答えて

1

パラメータの置換は?変数の展開と同じではありません。これは動作しない場合に期待しているようです。 dbに到達する実際のSQLは、IN( "blue butterfly wing"、 "blue dartwing"、 "blue mountain flower")のように見えるかもしれません。

+0

私は文字列の置換を考えていた。文字列全体だけでなく、値ごとに別々のプレースホルダが必要になることはわかりませんでした。 – pdizz

関連する問題