Maison > développement back-end > tutoriel php > Comment supprimer efficacement des enregistrements avec des clauses « WHERE... IN » dans les requêtes PDO ?

Comment supprimer efficacement des enregistrements avec des clauses « WHERE... IN » dans les requêtes PDO ?

Linda Hamilton
Libérer: 2024-10-30 03:03:02
original
541 Les gens l'ont consulté

How to Effectively Delete Records with

Requêtes PDO avec clauses "WHERE... IN"

Lorsque vous travaillez avec le PDO de PHP pour l'accès à la base de données, la construction de "WHERE... Les requêtes IN" peuvent être difficiles. Dans ce cas, l'objectif est de supprimer des enregistrements d'une table en fonction d'une liste d'identifiants obtenus à partir d'un formulaire.

Requête originale

<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
$st = $db->prepare($query);
$st->execute(array(':idlist' => $idlist));</code>
Copier après la connexion

Problème

Cette requête supprime uniquement le premier identifiant de la liste, ignorant les identifiants restants en raison du séparateur par virgule.

Solution utilisant des points d'interrogation

Étant donné que les instructions préparées ne peuvent pas mélanger les valeurs avec la logique du flux de contrôle (les virgules), il est nécessaire d'utiliser un espace réservé par valeur dans la liste. Ceci est réalisé en créant une chaîne de points d'interrogation séparés par des virgules et en leur liant les identifiants individuels.

<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>
Copier après la connexion

Cette approche nécessite de parcourir la liste pour lier chaque identifiant de manière séquentielle, garantissant que tous les enregistrements sont supprimés comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal