ホームページ  >  記事  >  バックエンド開発  >  複数のレコードを削除するときに PDO で「WHERE... IN」クエリを処理するにはどうすればよいですか?

複数のレコードを削除するときに PDO で「WHERE... IN」クエリを処理するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-29 04:30:02297ブラウズ

How to Handle

PDO による "WHERE... IN" クエリの処理

データベース アクセスに PDO を使用する場合、"WHERE... IN" クエリを管理します。 IN」句は問題を引き起こす可能性があります。次のシナリオを考えてみましょう。可変長と内容 (例: '260,201,221,216,217,169,210,212,213') を持つ「$idlist」として表される、チェックされたフォーム項目のリストに基づいてデータベース テーブルからエントリを削除する必要があります。

最初に、以下のようなクエリの使用は論理的であるように思えるかもしれません:

<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)";</code>

ただし、この方法では最初の ID のみが削除されます。カンマとそれに続く ID は誤って無視されます。

この問題を解決するには、PDO の準備されたステートメントの動作を理解することが重要です。数値または名前付きパラメータを使用して、値をプレースホルダにバインドできます。 「WHERE... IN」クエリの場合、リスト内の各 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)");</code>

次に、各 ID をバインドします。対応する疑問符:

<code class="php">for ($i = 0; $i < count($idlist); $i++) {
    $stmt->bindParam($i + 1, $idlist[$i]);
}</code>

このメソッドは、リスト内の各項目がプレースホルダーに適切にバインドされていることを確認し、クエリで目的のレコードを正常に削除できるようにします。

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

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