ホームページ >データベース >mysql チュートリアル >IN 演算子で MySQLi プリペアド ステートメントを正しく使用するにはどうすればよいですか?

IN 演算子で MySQLi プリペアド ステートメントを正しく使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 14:37:12706ブラウズ

How to Correctly Use MySQLi Prepared Statements with the IN Operator?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。