En un esfuerzo por mejorar el acceso a la base de datos con PDO, numerosos desarrolladores encuentran desafíos, particularmente con "WHERE... EN" consultas. Profundicemos en las complejidades y descubramos el enfoque adecuado para usar una lista de elementos dentro de una declaración preparada de PDO.
Considere un escenario en el que necesite eliminar elementos de una base de datos basándose en una lista de elementos marcados de un formulario. Cada elemento tiene una identificación correspondiente, que normalmente se almacenaría en una matriz. La consulta convencional "DÓNDE... EN" se vería así:
$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));
Sin embargo, este enfoque a menudo da como resultado que solo se elimine la primera ID. Esto se debe a que PDO interpreta la lista separada por comas como un valor único, por lo que ignora los ID posteriores.
Para evitar este problema, se deben aprovechar los marcadores de posición y vincular parámetros. El enfoque implica reemplazar toda la lista separada por comas con marcadores de posición individuales (signos de interrogación) y recorrer la matriz para vincular cada ID a un marcador de posición. Así es como lograrías esto:
$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(1, $id); }
Este enfoque revisado garantiza que cada ID se trate como un parámetro independiente, lo que permite una ejecución precisa de la consulta.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3