ホームページ >バックエンド開発 >PHPチュートリアル >文字列の配列を MySQLi プリペアドステートメントの IN 句に効率的にバインドするにはどうすればよいですか?
IN 句に対する MySQLi プリペアド ステートメントの文字列の配列のバインド
データベース対話の領域では、次のような状況が発生することがあります。文字列値の配列を MySQLi プリペアドステートメント内の WHERE IN (?) 句にバインドする必要があります。この記事では、基礎となる原則を詳しく掘り下げ、特に PHP バージョン 8.2、8.1、およびそれ以前のバージョンに焦点を当てた洗練されたソリューションを提供します。
PHP 8.2: 簡略化されたアプローチ
PHP 8.2 で導入されたexecute_query() 関数は、データが入力されたプリペアド ステートメントを実行するプロセスを合理化します。配列。例:
$sql = "SELECT name FROM table WHERE city IN (?,?)"; $array = ["Nashville", "Knoxville"]; $result = $mysqli->execute_query($sql, $array);
動的なプレースホルダー数が関係する場合、str_repeat() を使用してプレースホルダーを動的に構築できます:
$array = ["Nashville", "Knoxville"]; $parameters = str_repeat("?,", count($array) - 1) . "?"; $sql = "SELECT name FROM table WHERE city IN ($parameters)"; $result = $mysqli->execute_query($sql, $array);
PHP 8.1: Direct Array Execution
PHP 8.1 以降では、プリペアドステートメントを配列に直接使用し、明示的なバインディングの必要性を排除します:
$sql = "SELECT name FROM table WHERE city IN (?,?)"; $stmt = $mysqli->prepare($sql); $stmt->execute(["Nashville", "Knoxville"]); $result = $stmt->get_result();
以前のバージョン: Komplexity の採用
PHP 8.1 より前のバージョンの場合、プロシージャこれはもう少し複雑です:
例:
$array = ["Nashville", "Knoxville"]; $in = str_repeat("?,", count($array) - 1) . "?"; $sql = "SELECT name FROM table WHERE city IN ($in)"; $stmt = $mysqli->prepare($sql); $types = str_repeat("s", count($array)); $stmt->bind_param($types, ...$array); $stmt->execute(); $result = $stmt->get_result();
少し冗長ではありますが、このコードは他のアプローチと比較して簡潔な解決策を提供します。
結論として、 MySQLi のプリペアド ステートメントで文字列の配列を IN 句にバインドするには、さまざまな PHP バージョンに合わせたいくつかのメソッドが必要です。この記事で説明されている手法を活用すると、データベース操作でこれらのクエリを効果的に実行できます。
以上が文字列の配列を MySQLi プリペアドステートメントの IN 句に効率的にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。