Maison > développement back-end > tutoriel php > Comment gérer les requêtes « WHERE... IN » avec PDO lors de la suppression de plusieurs enregistrements ?

Comment gérer les requêtes « WHERE... IN » avec PDO lors de la suppression de plusieurs enregistrements ?

DDD
Libérer: 2024-10-29 04:30:02
original
361 Les gens l'ont consulté

How to Handle

Gestion des requêtes "WHERE... IN" avec PDO

Lors de l'utilisation de PDO pour l'accès à la base de données, gestion des requêtes avec "WHERE... IN" Les clauses IN" peuvent poser un défi. Considérez le scénario suivant : vous devez supprimer des entrées d'une table de base de données en fonction d'une liste d'éléments de formulaire cochés, représentés par "$idlist" avec une longueur et un contenu variables (par exemple, "260,201,221,216,217,169,210,212,213").

Au départ, utiliser une requête comme celle ci-dessous peut sembler logique :

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

Cependant, cette approche ne supprime que le premier identifiant. Les virgules et les identifiants suivants sont ignorés par erreur.

Pour surmonter ce problème, il est crucial de comprendre le comportement des instructions préparées dans PDO. Les valeurs peuvent être liées à des espaces réservés à l'aide de paramètres numérotés ou nommés. Pour une requête "WHERE... IN", chaque ID de la liste doit avoir son propre espace réservé.

La solution nécessite une approche dynamique :

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

Ensuite, liez chaque ID à un point d'interrogation correspondant :

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

Cette méthode garantit que chaque élément de la liste est correctement lié à un espace réservé, permettant à la requête de supprimer avec succès les enregistrements prévus.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal