Обработка подготовленных операторов с помощью условия 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:
Этот подход гарантирует, что значения в $villes правильно экранируются и обрабатываются как отдельные значения в условии IN().
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3