wpdb::delete()publicWP 3.4.0

Удаляет строки из таблицы по условию указанному в параметре $where.

Включает защиту от SQL инъекций, это значит что можно передавать неочищенные данные, например: $_GET['foo']...

Метод класса: wpdb{}

Работает на основе: wpdb::query(), wpdb::process_fields()

Хуков нет.

Возвращает

int|false. Число удаленных строк или 0, если ничего не удалено. false возвращается при ошибке запроса.

Использование

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

Примеры

0

#1 Пример удаления данных из БД

// Удалим строку с полем ID=1 из таблицы table
$wpdb->delete( 'table', [ 'ID' => 1 ] );

// Укажем формат значения $where
$wpdb->delete( 'table', [ 'ID'=>'1' ], [ '%d' ] ); // 1 будет обработано как число (%d).

Заметки

Список изменений

С версии 3.4.0 Введена.

Код wpdb::delete() WP 6.5.2

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