ホームページ >バックエンド開発 >PHPチュートリアル >文字列の配列を MySQLi プリペアド ステートメントに正しくバインドするにはどうすればよいですか?
文字列の配列を mysqi プリペアド ステートメントにバインドする
MySQL を使用する場合、多くの場合、値の配列を準備されたステートメントを使用する WHERE IN 句。このタスクは簡単そうに見えますが、エラーにつながる可能性のある落とし穴がいくつかあります。
この記事では、mysqli プリペアド ステートメントを使用して文字列の配列をバインドする正しいアプローチを検討します。また、関連する手順の詳細な説明を提供し、考えられる解決策についても説明します。
何が問題ですか?
質問で提供されているコード サンプルは、誤って次のことを試みています。 bind_param を使用して、都市の配列を準備されたステートメントにバインドします。ただし、bind_param は引数としてスカラー値 (文字列、整数など) を期待します。配列を直接バインドしようとすると、エラーが発生します。
正しいアプローチ
文字列の配列を準備されたステートメントに正常にバインドするには、次のコードを使用できます。手順:
サンプルコード
これは正しいコードの例ですcode:
$mysqli = new mysqli("localhost", "root", "root", "db"); if(!$mysqli || $mysqli->connect_errno) { return; } $cities = explode(",", $_GET['cities']); $in = str_repeat('?,', count($cities) - 1) . '?'; $query_str = "SELECT name FROM table WHERE city IN ($in)"; $query_prepared = $mysqli->stmt_init(); if($query_prepared && $query_prepared->prepare($query_str)) { $types = str_repeat('s', count($cities)); $query_prepared->bind_param($types, ...$cities); $query_prepared->execute(); }
この例では、まず str_repeat を使用してプレースホルダーの文字列を作成します。次に、このプレースホルダー文字列をクエリに挿入し、ステートメントを準備します。 ...$cities を使用して city 配列の個々の要素をバインドし、str_repeat('s', count($cities)) を使用してデータ型を指定する方法に注目してください。
これらの手順に従うことで、正常に実行できます。文字列の配列を mysqli プリペアド ステートメントにバインドし、意図したとおりにクエリを実行します。
以上が文字列の配列を MySQLi プリペアド ステートメントに正しくバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。