ホームページ > バックエンド開発 > PHPチュートリアル > PDO は IN() 句クエリの配列バインディングを処理できますか?

PDO は IN() 句クエリの配列バインディングを処理できますか?

DDD
リリース: 2024-12-25 07:52:14
オリジナル
584 人が閲覧しました

Can PDO Handle Array Binding for IN() Clause Queries?

PDO で配列を IN() 条件にバインドできますか?

IN() 条件の PDO クエリで配列を利用すると、これは、配列メンバーごとにプレースホルダーを手動で構築することで実現できます。プロセスの内訳は次のとおりです。

$ids       = [1, 2, 3, 7, 8, 9];
$inQuery    = str_repeat('?,', count($ids) - 1) . '?'; // generates ?,?,?,?,?,?

$stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)");
$stmt->execute($ids);
$data = $stmt->fetchAll();
ログイン後にコピー

str_repeat を使用して $inQuery 変数を構築し、プレースホルダーのリストを作成します。これにより、各配列メンバーに対応するプレースホルダーが確保されます。

もう 1 つの方法は、プレースホルダーとそれに関連付けられた値を含む配列をマージすることです。この方法は、クエリ内に他のプレースホルダーが存在する場合に適しています。

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stmt = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stmt->execute($params);
$data = $stmt->fetchAll();
ログイン後にコピー

名前付きプレースホルダーでは、少し異なるアプローチが必要で、:id0,:id1,:id2 などの対応するプレースホルダー シーケンスを作成します。

$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key;
    $in_params[$key] = $item;
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stmt = $db->prepare($sql);
$stmt->execute(array_merge($params, $in_params));
$data = $stmt->fetchAll();
ログイン後にコピー

これらのメソッドは、PDO で IN() 条件で配列を使用する安全かつ効率的な方法を提供します。

以上がPDO は IN() 句クエリの配列バインディングを処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート