PHPにて、SQL文をプリペアドステートメントで実行する際のIN句の中身について
$names = " ’a’, ’b’, ’c’ ";
という文字列をあらかじめ用意しておいて
$sql = "SELECT hoge FROM TBL1 WHERE hoge IN (:names);";
$params = array(":name"=>$names);
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
としたいのですがうまくいきません。
簡略化のためプレースホルダは1つにしてありますが、実際は複数あります。
文字列にしてあるだけだし感覚的には出来そうなのですが、無理なんですか?
ちなみにphpmyadminでSQL直打ちの
SELECT hoge FROM TBL1 where hoge IN (’a’,’b’,’c’);
ならもちろん動いてます。
みんなの回答 2 件
記載間違いとは思いますが、「name」なのか「names」なのか統一したほうがよいと思います。
あとプレースホルダで置き換わる際は前後にシングルクォートが付与されてしまいますので、$namesでは前後のシングルクォートを削除しておいたほうが良いかと思います。
これの例5とか見てみて。
PHP: PDOStatement::execute - Manual
http://www.php.net/manual/ja/pdostatement.execute.php関連するトピックス