Em um esforço para melhorar o acesso ao banco de dados com PDO, vários desenvolvedores encontram desafios, particularmente com "WHERE... IN" consultas. Vamos nos aprofundar nos meandros e descobrir a abordagem adequada para usar uma lista de itens dentro de uma declaração preparada pelo DOP.
Considere um cenário em que você precisa excluir itens de um banco de dados com base em uma lista de itens verificados de um formulário. Cada item possui um ID correspondente, que normalmente seria armazenado em uma matriz. A consulta convencional "WHERE... IN" seria mais ou menos assim:
$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));
No entanto, essa abordagem geralmente resulta na exclusão apenas do primeiro ID. Isso ocorre porque o PDO interpreta a lista separada por vírgula como um valor único, ignorando, portanto, os IDs subsequentes.
Para contornar esse problema, é necessário aproveitar espaços reservados e vincular parâmetros. A abordagem envolve substituir toda a lista separada por vírgulas por espaços reservados individuais (pontos de interrogação) e percorrer a matriz para vincular cada ID a um espaço reservado. Veja como você conseguiria isso:
$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); }
Essa abordagem revisada garante que cada ID seja tratado como um parâmetro separado, permitindo assim a execução precisa da consulta.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3