ホームページ >バックエンド開発 >PHPチュートリアル >PDO を使用して配列を IN() 条件にバインドするにはどうすればよいですか?

PDO を使用して配列を IN() 条件にバインドするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 00:48:16446ブラウズ

How Can I Bind an Array to an IN() Condition Using PDO?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。