ホームページ  >  記事  >  バックエンド開発  >  プレースホルダーとパラメーターを使用して「WHERE... IN」を含む PDO クエリを実行する方法

プレースホルダーとパラメーターを使用して「WHERE... IN」を含む PDO クエリを実行する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 04:20:02759ブラウズ

How to Execute PDO Queries with

「WHERE... IN」を使用した PDO クエリ

PDO によるデータベース アクセスを強化する取り組みの中で、多くの開発者が、特に「WHERE... IN」に関する課題に直面しています。 IN」のクエリ。複雑な点を詳しく調べて、PDO プリペアド ステートメント内で項目のリストを使用するための適切なアプローチを見つけてみましょう。

「WHERE... IN」の難題

次のことが必要なシナリオを考えてみましょう。フォームからチェックされたアイテムのリストに基づいて、データベースからアイテムを削除します。各アイテムには対応する ID があり、通常は配列に格納されます。従来の「WHERE... IN」クエリは次のようになります。

$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)";
$st = $db->prepare($query);
$st->execute(array(':idlist' => $idlist));

ただし、このアプローチでは、多くの場合、最初の ID のみが削除されます。これは、PDO がコンマ区切りのリストを単一の値として解釈し、後続の ID を無視するためです。

プレースホルダーとパラメーターの採用

この問題を回避するには、プレースホルダーを利用してパラメーターをバインドする必要があります。このアプローチには、カンマ区切りのリスト全体を個々のプレースホルダー (疑問符) に置き換え、配列をループして各 ID をプレースホルダーにバインドすることが含まれます。これを実現する方法は次のとおりです。

$idlist = array('260','201','221','216','217','169','210','212','213');

$questionmarks = str_repeat("?,", count($idlist)-1) . "?";

$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");

foreach ($idlist as $id) {
  $stmt->bindParam(1, $id);
}

この改訂されたアプローチにより、各 ID が個別のパラメーターとして扱われるようになり、クエリを正確に実行できるようになります。

以上がプレースホルダーとパラメーターを使用して「WHERE... IN」を含む PDO クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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