Intereting Posts
Как получить все последние вставленные идентификаторы строк в mysql-php? PHP-скрипт для резервного копирования базы данных MySQL Является ли PHP или PHP на основе веб-инфраструктуры stateful или апатридом? Запрещено У вас нет разрешения на доступ к этому серверу. Сервер не может читать файл htaccess, запрещающий доступ к безопасности загружать изображения спереди Исключить исключение в блоке try / catch Центрирование изображения на загруженном изображении в PHP Как получить все значения в столбце с помощью PHP? Переменные PHP, сделанные с помощью foreach Что-нибудь похожее на Hibernate в PHP? PHP Типичная альтернатива только выходу табуляции (дубликат) Могу ли я каким-то образом узнать, какая замена происходит из-за обратного вызова preg_replace_callback? Как реализовать связь между клиентским приложением Java (Android) и приложением PHP-сервера? MySQLi подготовил операторы с оператором IN как отображать папки и подпапки из dir в PHP

Проблема при попытке использования IN () в wpdb

у меня есть это:

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

когда я выполняю запрос echo $query; я получил:

 SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN('\"CHAPELLE VIVIERS \",\"LE MANS \",\"QUEND\"') 

$wpdb том, что $wpdb add ' in IN('...')

может кто-то помочь, спасибо

Related of "Проблема при попытке использования IN () в wpdb"

Попробуйте этот код (FIXED):

 // Create an array of the values to use in the list $villes = array("paris", "fes", "rabat"); // Generate the SQL statement. // The number of %s items is based on the length of the $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)); echo $query; 
  • implode()
  • array_fill()
  • call_user_func_array()
  • array_merge()

Для этой цели WordPress уже имеет функцию, см. Esc_sql () . Вот определение этой функции:

Сбрасывает данные для использования в запросе MySQL. Обычно вы должны готовить запросы, используя wpdb :: prepare (). Иногда, спот-экранирование требуется или полезно. Одним из примеров является подготовка массива для использования в предложении IN.

Вы можете использовать его следующим образом:

 $villes = ["paris", "fes", "rabat"]; $villes = array_map(function($v) { return "'" . esc_sql($v) . "'"; }, $villes); $villes = implode(',', $villes); $query = "SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN (" . $villes . ")" 

НАЗНАЧЕНИЕ:

 function escape_array($arr){ global $wpdb; $escaped = array(); foreach($arr as $k => $v){ if(is_numeric($v)) $escaped[] = $wpdb->prepare('%d', $v); else $escaped[] = $wpdb->prepare('%s', $v); } return implode(',', $escaped); } 

ПРИМЕНЕНИЕ:

 $arr = array('foo', 'bar', 1, 2, 'foo"bar', "bar'foo"); $query = "SELECT values FROM table WHERE column NOT IN (" . escape_array($arr) . ")"; echo $query; 

РЕЗУЛЬТАТ:

 SELECT values FROM table WHERE column NOT IN ('foo','bar',1,2,'foo\"bar','bar\'foo') 

Может или не может быть более эффективным, однако он может использоваться повторно.

Функция prepare также принимает в качестве второго параметра array .

Вы можете попробовать конвертировать $villes следующим образом:

Текущий

 <?php $villes = '"paris","fes","rabat"'; ? 

Измените его на

 <?php $villes = array("paris","fes","rabat"); ?> 

Теперь попробуйте передать $villes для функции func и посмотреть, работает ли она. Надеюсь, поможет.