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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 00:12:10387ブラウズ

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

IN 演算子を使用した MySQLi プリペアド ステートメント

プリペアド ステートメントは、パラメータ値を個別に指定できるため、従来のクエリに比べてセキュリティとパフォーマンスが強化されています。発言そのもの。ただし、IN 演算子でプリペアド ステートメントを使用する場合、アプローチが正しくないと問題が発生する可能性があります。

問題

最初で述べたようにクエリで、bind_param('s', $in_statement) を使用してコンマ区切りの値の文字列をプリペアド ステートメントにバインドすると、データが

解決策

解決策は、各パラメータ値を個別に処理することです。

  1. 番号付きキーを含む配列を作成し、値を渡します。
  2. パラメータの数を数え、適切な数の i 文字を含む文字列を作成します。
  3. データ型文字列と疑問符の配列を組み合わせて、準備されたステートメントのパラメータ文字列を形成します。
  4. データ型文字列をパラメータ値の配列にシフト解除します。
  5. call_user_func_array を使用して、パラメータ値の配列を準備されたパラメータ値にバインドしますstate.

コード例

<?php
$lastnames = ['braun', 'piorkowski', 'mason', 'nash'];
$arParams = [];

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 = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})");
call_user_func_array([$data_res, 'bind_param'], $arParams);
$data_res->execute();
$result = $data_res->get_result();

while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    // Your code here...
}

$result->free();
$data_res->close();

このアプローチにより、IN 演算子を使用して準備されたステートメントに複数の値を適切にバインドできます。

以上がIN 演算子で MySQLi プリペアド ステートメントを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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