"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment gérer les instructions préparées avec la condition IN() dans WordPress ?

Comment gérer les instructions préparées avec la condition IN() dans WordPress ?

Publié le 2024-12-23
Parcourir:704

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

Gestion des instructions préparées avec la condition IN() dans WordPress

WordPress fournit des instructions préparées pour se protéger contre les attaques par injection SQL et améliorer les performances des requêtes. Cependant, l'utilisation de la condition IN() avec plusieurs valeurs dans une chaîne peut présenter des défis.

Énoncé du problème :

Considérez la situation suivante :

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

Ce code n'échappe pas correctement à la chaîne, ce qui entraîne une seule chaîne avec des guillemets doubles échappés :

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

Solution :

Pour correctement implémentez une instruction préparée avec plusieurs valeurs dans WordPress, suivez ces étapes :

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

Fonctions PHP utilisées :

  • implode() - Joint les éléments du tableau dans un string
  • array_fill() - Crée un tableau rempli avec une valeur spécifique
  • call_user_func_array() - Appelle une fonction avec les paramètres passés en tant que array
  • array_merge() - Fusionne deux tableaux

Cette approche garantit que les valeurs de $villes sont correctement échappées et traitées comme des valeurs distinctes dans la condition IN().

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3