Tratamento de consultas "WHERE... IN" com PDO
Ao usar PDO para acesso ao banco de dados, gerenciamento de consultas com "WHERE... As cláusulas IN" podem representar um desafio. Considere o seguinte cenário: você precisa remover entradas de uma tabela de banco de dados com base em uma lista de itens de formulário verificados, representados como "$idlist" com comprimento e conteúdo variáveis (por exemplo, '260.201.221.216.217.169.210.212.213').
Inicialmente, usar uma consulta como a abaixo pode parecer lógico:
$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
No entanto, esta abordagem exclui apenas o primeiro ID. As vírgulas e os IDs subsequentes são ignorados por engano.
Para superar esse problema, é crucial entender o comportamento das instruções preparadas no PDO. Os valores podem ser vinculados a espaços reservados usando parâmetros numerados ou nomeados. Para uma consulta "WHERE... IN", cada ID na lista deve ter seu próprio espaço reservado.
A solução requer uma abordagem dinâmica:
$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)");
Em seguida, vincule cada ID a um ponto de interrogação correspondente:
for ($i = 0; $i bindParam($i 1, $idlist[$i]);
}
Este método garante que cada item da lista esteja devidamente vinculado a um espaço reservado, permitindo que a consulta exclua com sucesso os registros pretendidos.
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