Tratamento de instruções preparadas com condição IN() no WordPress
WordPress fornece instruções preparadas para proteger contra ataques de injeção de SQL e melhorar o desempenho da consulta. No entanto, usar a condição IN() com vários valores em uma string pode apresentar desafios.
Declaração do problema:
Considere a seguinte situação:
$villes = '"paris","fes","rabat"'; $sql = 'SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN(%s)'; $query = $wpdb->prepare($sql, $villes);
Este código não escapa corretamente da string, resultando em uma única string com aspas duplas de escape:
SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN('\"paris\",\"fes\",\"rabat\"')
Solução:
Para corrigir implementar uma instrução preparada com vários valores no WordPress, siga estas etapas:
// Create an array of the values to use in the list $villes = array('paris', 'fes', 'rabat'); // Generate the SQL statement. // Number of %s items based on length of $villes array $sql = " SELECT DISTINCT telecopie FROM `comptage_fax` WHERE `ville` IN(" . implode(', ', array_fill(0, count($villes), '%s')) . ") "; // Call $wpdb->prepare passing the values of the array as separate arguments $query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql), $villes));
Funções PHP usadas:
Este abordagem garante que os valores em $villes tenham escape adequado e sejam tratados como valores separados na condição IN().
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