ホームページ > バックエンド開発 > PHPチュートリアル > PDO クエリで「WHERE... IN」句を含むレコードを効果的に削除するにはどうすればよいですか?

PDO クエリで「WHERE... IN」句を含むレコードを効果的に削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-30 03:03:02
オリジナル
526 人が閲覧しました

How to Effectively Delete Records with

「WHERE... IN」句を含む PDO クエリ

データベース アクセスのために PHP の PDO を使用する場合、「WHERE... IN」を構築します。 IN」クエリは難しい場合があります。この場合の目的は、フォームから取得した ID のリストに基づいてテーブルからレコードを削除することです。

元のクエリ

<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
$st = $db->prepare($query);
$st->execute(array(':idlist' => $idlist));</code>
ログイン後にコピー

問題

このクエリはリストの最初の ID のみを削除し、カンマ区切り文字により残りの ID は破棄されます。

疑問符を使用した解決策

準備されたステートメントでは値を制御フロー ロジック (カンマ) と混合できないため、リスト内の値ごとに 1 つのプレースホルダーを使用する必要があります。これは、カンマ区切りの疑問符の文字列を作成し、個々の ID をそれらにバインドすることによって実現されます。

<code class="php">$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($id);
}</code>
ログイン後にコピー

このアプローチでは、リストをループして各 ID を順番にバインドする必要があり、すべてのレコードが確実に削除されます。

以上がPDO クエリで「WHERE... IN」句を含むレコードを効果的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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