PDO を使用した IN 句のバインド パラメータ: 不一致の解決
PDO を使用して IN 句のバインド パラメータを利用すると、予期しない結果が発生する可能性があります。具体的には、提供されたコードは、bindParam() によって配列を IN 句にバインドすると不正確なカウントが発生する一方、クエリ内で配列を直接使用すると目的の出力が生成されることを示しています。
この矛盾を理解するには、次のことが重要です。 PHP の implode() 関数は、配列を単一のカンマ区切りの文字列に連結することを認識してください。これにより、IN 句の値のリストが作成されたように見えますが、データベースはそれを単一の値として認識します。その結果、結果のクエリは次のようになります。
SELECT foo FROM bar WHERE ids IN ('1,2,3')
このシナリオでは、データベースは文字列全体を単一の値として扱うため、誤ったカウントが 1 になります。
解決策は手動です。クエリ自体内で IN 句を構築します。 PHP の文字列連結 ('.') 演算子を利用することで、配列をクエリに直接組み込むことができます。
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
このアプローチにより、データベースは配列内の各値を個別のエントリとして確実に認識し、正確なカウント。現時点では、IN 句のパラメータをバインドする代替方法がないことに注意することが重要です。
以上がPDO の IN 句に配列をバインドすると不正確な結果が得られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。