ホームページ >データベース >mysql チュートリアル >PDO を使用して配列値を MySQL IN ステートメントに正しくバインドするにはどうすればよいですか?
MySQL IN ステートメントの PDO バインディング値
PDO を使用する場合、値の配列を MySQL IN ステートメントにバインドすると、予期しないエラーが発生する可能性があります行動。デフォルトでは、PDO はバインドされた値を単一の文字列として扱い、その結果、個々の値ではなく文字列全体に対して IN ステートメントを使用するクエリが生成されます。
問題:
この問題を説明するために、次のコードを考えてみましょう。
// Array of values $values = array(1, 2, 3, 4, 5, 6, 7, 8); // Database-safe variable $products = implode(',', $values); // PDO statement $stmt = $conn->prepare("SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN (:products)"); // Bind the values $stmt->bindParam(':products', $products);
この場合、結果のクエリは次のようになります。 be:
SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN ('1,2,3,4,5,6,7,8')
このクエリは事実上、文字列全体を単一の条件として扱いますが、これは意図した動作ではありません。
解決策:
この問題を解決するには、いくつかのオプションが利用可能です:
SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE find_in_set(cast(products.id as char), :products)
このアプローチでは、値を文字型にキャストする必要があるため、大規模なデータセットのパフォーマンスに影響を与える可能性があります。
追加の注意事項:
以上がPDO を使用して配列値を MySQL IN ステートメントに正しくバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。