"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como lidar com instruções preparadas com condição IN() no WordPress?

Como lidar com instruções preparadas com condição IN() no WordPress?

Publicado em 23/12/2024
Navegar:780

How to Handle Prepared Statements with IN() Condition in WordPress?

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:

  • implode() - Une elementos do array em um string
  • array_fill() - Cria um array preenchido com um valor específico
  • call_user_func_array() - Chama uma função com os parâmetros passados ​​como um array
  • array_merge() - Mescla dois arrays

Este abordagem garante que os valores em $villes tenham escape adequado e sejam tratados como valores separados na condição IN().

Tutorial mais recente Mais>

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