Как удалить сразу несколько строк через wpdb->delete()?

407
20 мая 2017, 20:32

Данные в POST запросе приходят в виде ассоциативного массива:

array(2) {
  [0]=>
  array(1) {
    ["plgn_post_url"]=>
    string(110) "https://scontent.cdninstagram.com/t51.2885-15/s320x320/e35/17934632_1891986064378361_8110928872435875840_n
.jpg"
  }
  [1]=>
  array(1) {
    ["plgn_post_url"]=>
    string(109) "https://scontent.cdninstagram.com/t51.2885-15/s320x320/e35/18382713_118552792048179_6482017612954861568_n
.jpg"
  }
}

Необходимо при помощи $wpdb->delete удалить строки из таблицы со значениями колонки, равными значениям в массиве. Колонка, по которой идет отбор в таблице, имеет такое же название как и элементы в массиве - plgn_post_url. Сейчас при запросе

$wpdb->delete($table_name, $data)

выдает:

mysqli_real_escape_string() expects parameter 2 to be string, array given in C:\xampp \apps\wordpress\htdocs\wp-includes\wp-db.php on line 1171
"\"Error Unknown column '0' in 'where clause'\""

Answer 1

Функция wpdb->delete не поддерживает ничего, кроме одного значения в WHERE. Надо использовать

$wpdb->query( "DELETE FROM table_name WHERE plgn_post_url IN($urls)" );

$urls должна быть строкой, в которую вы соберёте все значения plgn_post_url через запятую.

READ ALSO
Правильная связка MYSQL запроса

Правильная связка MYSQL запроса

Существует три таблицы

278
Объединение двух связей belongsToMany в одну Laravel

Объединение двух связей belongsToMany в одну Laravel

ЗдравствуйтеПодскажите, кто может

295
Не переносится строка в коде php

Не переносится строка в коде php

Есть простенький кодНа почту приходит $message в одну строку

235
Как вывести static переменную из функции?

Как вывести static переменную из функции?

Хочу чтобы переменная возвращала количество вызовов функции

295