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
DDDoriginal
2024-10-29 04:30:02307parcourir

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>

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>

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>

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:
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