ホームページ >バックエンド開発 >PHPチュートリアル >PDO を使用して配列を IN() 条件にバインドするにはどうすればよいですか?
PDO を使用した IN() 条件への配列のバインド
データベース クエリの領域では、次のようなシナリオに遭遇することがよくあります。 IN() 条件の値の配列。 PDO はパラメーターをバインドするための便利なメカニズムを提供しますが、配列をそのような条件に直接バインドすることはネイティブにはサポートされていません。
カスタム プレースホルダー シーケンスの作成
この制限を克服するには、ループを使用して、プレースホルダー シーケンスを手動で構築できます。
foreach ($ids as &$val) $val = $db->quote($val); $in = implode(',', $ids);
このアプローチでは、配列は引用符で囲まれ、カンマで区切られ、有効なプレースホルダー文字列を作成します。
$stmt = $db->prepare( 'SELECT * FROM table WHERE id IN(' . $in . ')' );
プレースホルダーを繰り返す別のアプローチ
代わりに、プレースホルダーを繰り返すクエリを作成することもできます。そして実行中に配列値を指定します:
$inQuery = str_repeat('?,', count($ids) - 1) . '?'; $stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)"); $stmt->execute($ids);
特に、このアプローチでは次のことが必要です。クエリには他のプレースホルダーが含まれていません。
名前付きプレースホルダーの処理
名前付きプレースホルダーについては、同様の方法を使用して、プレースホルダー シーケンスを動的に作成できます。
foreach ($ids as $item) { $key = ":id" . $i++; $in .= ($in ? "," : "") . $key; $in_params[$key] = $item; }
このアプローチにより、名前付きプレースホルダーで値の配列を使用できるようになり、より構造化された柔軟なバインディングが提供されます。メカニズム。
以上がPDO を使用して配列を IN() 条件にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。