Удаляет строки из таблицы по переданному в параметр $where условию.
Метод включает защиту от SQL инъекций и можно передавать неочищенные данные, например: $_GET['foo']
...
Хуков нет.
Возвращает
Число/0. Число удаленных строк или 0, если ничего не удалено.
Использование
global $wpdb; $wpdb->delete( $table, $where, $where_format );
- $table(строка) (обязательный)
- Название таблицы.
- $where(массив) (обязательный)
- Массив условий, по которым будут выбираться строки для удаления в формате
[ 'название колонки' => 'чему равно' ]
. Несколько условий будут объеденные черезAND
. Если в значении указатьNULL
то в запросе получим сравнениеIS NULL
, соответствующий формат при этом игнорируется. - $where_format(массив/строка)
Массив форматов данных которые будут ассоциированы с указанными значениями в параметре $where. Если указана строка, то она (формат) будет ассоциирован со всеми данными. При указании формата, WordPress переводит переданные данные в указанный формат перед созданием запроса. Возможные форматы:
%s
- строка%d
- целое число%f
- дробное число
Если не указать, то для всех значений $data будет указан формат
строка
, если иное не указано в свойстве wpdb::$field_types.
По умолчанию: null
Примеры
// Удалим строку с полем ID=1 из таблицы table $wpdb->delete( 'table', [ 'ID' => 1 ] ); // Укажем формат значения $where $wpdb->delete( 'table', [ 'ID'=>'1' ], [ '%d' ] ); // 1 будет обработано как число (%d).
Заметки
- Смотрите: wpdb::prepare()
- Смотрите: wpdb::$field_types
- Смотрите: wp_set_wpdb_vars()
Список изменений
public function delete( $table, $where, $where_format = null ) { if ( ! is_array( $where ) ) { return false; } $where = $this->process_fields( $table, $where, $where_format ); if ( false === $where ) { return false; } $conditions = array(); $values = array(); foreach ( $where as $field => $value ) { if ( is_null( $value['value'] ) ) { $conditions[] = "`$field` IS NULL"; continue; } $conditions[] = "`$field` = " . $value['format']; $values[] = $value['value']; } $conditions = implode( ' AND ', $conditions ); $sql = "DELETE FROM `$table` WHERE $conditions"; $this->check_current_query = false; return $this->query( $this->prepare( $sql, $values ) ); }