ホームページ >バックエンド開発 >PHPチュートリアル >PDO プリペアドステートメントで「WHERE... IN」を使用して複数の項目を削除するにはどうすればよいですか?

PDO プリペアドステートメントで「WHERE... IN」を使用して複数の項目を削除するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 22:34:02652ブラウズ

How to Delete Multiple Items with `WHERE... IN` in PDO Prepared Statements?

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

PDO クエリで「WHERE... IN」句を使用する場合、開発者は、リストの最初の項目のみが削除されるという問題に遭遇することがよくあります。これは、準備されたステートメント内で値 (数値) と制御フロー ロジック (カンマ) を混合することの非互換性により発生します。これを解決するには、リスト内の各値に独自のプレースホルダーが必要です。

解決策:

  1. 値を配列に分割します。例:
$idlist = array('260','201','221','216','217','169','210','212','213');
  1. 各値のプレースホルダーを表す疑問符の文字列をカンマで区切って構築します。例:
$questionmarks = str_repeat("?,", count($idlist)-1) . "?";
  1. クエリを準備する"IN" 句パラメータとして疑問符を使用します。例:
$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");
  1. $idlist 配列を反復処理し、各値をプレースホルダーにバインドします。例:
foreach ($idlist as $id) {
  $stmt->bindParam($i, $id);
  $i++; 
}

ステートメントが準備され、パラメーターがバインドされたら、クエリを実行すると、$idlist 配列で指定されたすべての項目が正常に削除されます。

以上がPDO プリペアドステートメントで「WHERE... IN」を使用して複数の項目を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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