文字列の配列を WHERE IN(?) 句にバインド
値の配列を WHERE IN(?) 句にバインドは一般的な MySQL タスクです。 PHP の mysqli プリペアド ステートメントを使用する場合、bind_param() 関数の制限や微妙な違いに慣れていないと、達成するのが難しい場合があります。
問題
bind_param() を使用して値の配列を IN(?) 句にバインドしようとすると問題が発生し、失敗する場合があります。
解決策
使用している PHP のバージョンに応じて、このタスクに取り組むさまざまな方法があります。
PHP 8.2 および上記
PHP 8.1
以前の PHP バージョン
古いバージョンの場合は、より複雑なアプローチが必要です。コード例
以前の PHP バージョンのアプローチを使用した例を次に示します。$array = ['Nashville', 'Knoxville']; $in = str_repeat('?,', count($array) - 1) . '?'; $sql = "SELECT name FROM table WHERE city IN ($in)"; $stmt = $mysqli->prepare($sql); // prepare $types = str_repeat('s', count($array)); // types $stmt->bind_param($types, ...$array); // bind array at once $stmt->execute(); $result = $stmt->get_result(); $data = $result->fetch_all(MYSQLI_ASSOC);
以上がPHP の mysqli 準備済みステートメントを使用して文字列の配列を MySQL の WHERE IN(?) 句に効率的にバインドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。