「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 サイトの他の関連記事を参照してください。