"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo manejar declaraciones preparadas con la condición IN() en WordPress?

¿Cómo manejar declaraciones preparadas con la condición IN() en WordPress?

Publicado el 2024-12-23
Navegar:582

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

Manejo de declaraciones preparadas con condición IN() en WordPress

WordPress proporciona declaraciones preparadas para proteger contra ataques de inyección SQL y mejorar el rendimiento de las consultas. Sin embargo, usar la condición IN() con múltiples valores en una cadena puede presentar desafíos.

Declaración del problema:

Considere la siguiente situación:

$villes = '"paris","fes","rabat"';
$sql = 'SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN(%s)';
$query = $wpdb->prepare($sql, $villes);

Este código no escapa correctamente la cadena, lo que da como resultado una sola cadena con comillas dobles escapadas:

SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN('\"paris\",\"fes\",\"rabat\"')

Solución:

Para corregir implemente una declaración preparada con múltiples valores en WordPress, siga estos pasos:

// 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));

Funciones PHP utilizadas:

  • implode() - Une elementos de matriz en un string
  • array_fill() - Crea una matriz llena con un valor específico
  • call_user_func_array() - Llama a una función con los parámetros pasados ​​como array
  • array_merge() - Fusiona dos arrays

Este enfoque garantiza que los valores en $villes se escapen correctamente y se traten como valores separados en la condición IN().

Último tutorial Más>

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