2

次のような「テーブル」という名前のテーブルのクエリ(PHP、Mysql)があります。

 id | name
-------------
  6 | abc
  10| xxx
  52| def

そしてクエリ:

$ids = '5,62'

$name = $pdo -> prepare('SELECT id, name FROM table WHERE id IN ( :ids )');
$name -> bindValue(':ids', $ids, PDO::PARAM_STR); 
$name -> execute();
$name = $name->fetchAll(PDO::FETCH_ASSOC);
print_r($nazwa);

次のような結果が得られると期待しています

 id | name
-------------
  6 | abc
  52| def

残念ながら、私は次のものしか得られません:

 id | name
-------------
  6 | abc

あたかも 2 番目の値が無視されるかのように。クエリを次のように変更すると:

$name = $pdo -> prepare('SELECT id, name FROM table WHERE id IN (' $ids ')');

それはすべてうまくいきます。準備されたステートメントがコンマを含む内破テーブルを考慮しない理由を教えてください。

4

1 に答える 1

2

コメントフィールドではそれをうまく書くことができないため、ここでは単なるコメントである回答を示します。

2つのIDがあるとします。

$name = $pdo->prepare('SELECT id, name FROM table WHERE id IN ( :id1, :id2 )');

3つのIDがあるとします。

$name = $pdo->prepare('SELECT id, name FROM table WHERE id IN ( :id1, :id2, :id3 )');

パターンが見えますか?IDと同じ数の値があります。準備ステートメントを作成し、IDの数に応じてバインドステートメントを実行します。

したがって、答えは次のとおりです。処理するIDの数を実際に反映するようにコードを変更する必要があります。MySQLサーバーは、文字列内のコンマ区切りリストを複数のIDとして魔法のように解釈しません。代わりに、各単一IDについてサーバーに通知する必要があります。

于 2012-04-13T00:38:37.593 に答える