MySQLi を使用した WHERE IN (?) 句の文字列の配列のバインド
MySQLi のプリペアド ステートメントを使用する場合は、次のことを理解することが重要です値の配列を WHERE IN (?) 句にバインドする方法。この記事は、この問題を効果的に解決するための包括的なガイドを提供します。
課題
目標は、都市名の配列を動的に WHERE IN 句にバインドすることです。 MySQLi の準備済みステートメント。ただし、配列のバインドが正しくないため、提供されたコードは最初は実行に失敗します。
文字列の配列のバインド
文字列の配列をバインドするには、いくつかの方法が存在します。利用可能なメソッドを見てみましょう:
1. execute_query() 関数 (PHP 8.2)
最も簡単なソリューションは、execute_query() 関数の導入により PHP 8.2 で利用可能です。このメソッドを使用すると、SQL ステートメントとバインドされる値の配列の両方を一度に渡すことができます。
$array = ['Nashville', 'Knoxville']; $parameters = str_repeat('?,', count($array) - 1) . '?'; $sql = "SELECT name FROM table WHERE city IN ($parameters)"; $result = $mysqli->execute_query($sql, $array);
2.配列をexecute()に渡す (PHP 8.1)
PHP 8.1では、プレースホルダーやバインディングを必要とせずに、配列をexecute() メソッドに直接渡すことができます。
$stmt = $mysqli->prepare($sql); $stmt->execute($array);
3.古いバージョンの準備/バインド/実行
PHP 8.1 より前のバージョンの場合は、次の手順が必要です。
$types = str_repeat('s', count($array)); $stmt->bind_param($types, ...$array);
例:
$array = ['Nashville', 'Knoxville']; $in = str_repeat('?,', count($array) - 1) . '?'; $sql = "SELECT name FROM table WHERE city IN ($in)"; $stmt = $mysqli->prepare($sql); $stmt->bind_param(str_repeat('s', count($array)), ...$array); $stmt->execute(); $result = $stmt->get_result();
これらのアプローチに従って、文字列の配列を WHERE IN (? MySQLi プリペアド ステートメントの ) 句。
以上が文字列の配列を MySQLi の WHERE IN (?) 句にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。