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... 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").
Initialement, utiliser une requête comme celle ci-dessous peut sembler logical:
$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
Cependant, cette approche ne supprime que le premier ID. 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 :
$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)");
Ensuite, liez chaque identifiant à un point d'interrogation correspondant :
for ($i = 0; $i bindParam($i 1, $idlist[$i]);
}
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 souhaités.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3