以下を含む mysql_query ステートメントを PDO に変換しようとしています。
$string = '2, 3, 4, 5, 7, 8';
mysql_query(" ... IN($string) ...");
これはmysql_query
ステートメントでは正常に機能しますが、PDO の準備と実行では機能しません (結果は返されません)。
ここで何が欠けていますか?
クエリ sql が で正常に動作する場合、mysql_query
pdo でも正常に動作します。
うまくいかないのは、文字列全体を 1 つのプレースホルダーだけにバインドした場合です。IN
句の値ごとにバインドする必要があります。
例:
$string = '2, 3, 4, 5, 7, 8';
$params = explode(', ', $string);
$sth = $pdo->prepare(' ... IN('.join(',', array_fill(0, count($params), '?')).') ...');
$ret = $sth->execute($params);
MySQL IN ステートメントの PDO バインディング値または配列を IN() 条件にバインドできますか? のいずれかを参照してください。.
複数の値を単一の名前付きパラメーターにバインドできないため、これがあなたが探しているソリューションだと思います。
「たとえば、SQL ステートメントの IN() 句で、複数の値を単一の名前付きパラメーターにバインドすることはできません。」
http://php.net/manual/en/pdo.prepare.php
これは、準備されたステートメントの目的全体に反します。