ホームページ >データベース >mysql チュートリアル >IN 演算子で MySQLi プリペアド ステートメントを正しく使用するにはどうすればよいですか?
IN 演算子を使用した MySQLi Prepared Statements
データベース クエリでは、IN 演算子を使用してリスト内の特定の値を検索できます。 IN 演算子を使用して MySQLi プリペアド ステートメントを使用する場合、正確な結果を保証するために適切な構文に従うことが重要です。
提供されたコードでは、一致するものが存在するにもかかわらず、クエリが結果を返さないという問題が発生しています。データベース内のデータ。これは、準備ステップでのエラーが原因である可能性があります。
あなたが発見したように、解決策には、call_user_func_array() 関数を使用して各パラメーターを参照によって明示的に渡すことが含まれます。これは、bind_param() メソッドがパラメータが値によって直接渡されることを想定しているためです。
パラメータを参照によって渡すことにより、MySQLi は値を正確に取得し、クエリを正しく実行します。変更されたコードの例を次に示します。
$lastnames = array('braun', 'piorkowski', 'mason', 'nash'); $arParams = array(); foreach ($lastnames as $key => $value) { $arParams[] = &$lastnames[$key]; } $count_params = count($arParams); $int = str_repeat('i', $count_params); array_unshift($arParams, $int); $q = array_fill(0, $count_params, '?'); $params = implode(',', $q); $data_res = $_DB->prepare('SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN (' . $params . ')'); call_user_func_array(array($data_res, 'bind_param'), $arParams); $data_res->execute();
この変更を行うと、準備されたステートメントが期待どおりに実行され、望ましい結果が返されます。
以上がIN 演算子で MySQLi プリペアド ステートメントを正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。