PDO を使用した WHERE IN 句のパラメータのバインド
PDO を使用して WHERE IN 句を含むクエリを実行する場合、パラメータのバインドが機能しない場合がある予想通り。提供されたコード スニペットに示されているように、値のコンマ区切りリストを :ids パラメーターにバインドすると、配列内に複数の値があるにもかかわらず、カウントは 1 になります。
説明
問題は、IN 句が値のフォーマットをどのように想定しているかにあります。配列をバインドするとき、PHP はすべての要素を単一の文字列に結合します。これはデータベースによって 1 つのパラメーターとして扱われます。これにより、次のクエリが実行されます:
SELECT foo FROM bar WHERE ids IN ('1,2,3')
ただし、IN 句では、各値が個別のパラメータである必要があります:
SELECT foo FROM bar WHERE ids IN (1, 2, 3)
Solution
これを解決するには、クエリ文字列に IN リストを手動で挿入する必要があります。
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
あるいは、bindParam メソッドを使用して、配列ではなく個々の値をバインドすることもできます。
以上がPDO で WHERE IN 句のパラメータを適切にバインドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。