«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обрабатывать подготовленные операторы с условием IN() в WordPress?

Как обрабатывать подготовленные операторы с условием IN() в WordPress?

Опубликовано 23 декабря 2024 г.
Просматривать:786

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

Обработка подготовленных операторов с помощью условия IN() в WordPress

WordPress предоставляет подготовленные операторы для защиты от атак SQL-инъекций и повышения производительности запросов. Однако использование условия IN() с несколькими значениями в строке может вызвать проблемы.

Постановка задачи:

Рассмотрим следующую ситуацию:

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

Этот код неправильно экранирует строку, в результате чего получается одна строка с экранированными двойными кавычками:

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

Решение:

Чтобы правильно реализовать подготовленный оператор с несколькими значениями в WordPress, выполните следующие действия:

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

Используемые функции PHP:

  • implode() — объединяет элементы массива в string
  • array_fill() — создает массив, заполненный определенным значением.
  • call_user_func_array() — вызывает функцию с параметрами, передаваемыми как array
  • array_merge() — объединяет два arrays

Этот подход гарантирует, что значения в $villes правильно экранируются и обрабатываются как отдельные значения в условии IN().

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3