wpdb::update() publicWP 2.5.0

Оновлює вказані дані у вказаному рядку таблиці.

Метод включає захист від SQL ін’єкцій та дані можна передавати як є, наприклад: $_GET['foo'].

НЕ вставляє дані, якщо їх немає в БД – тільки оновлює існуючі дані.

{} Це метод класу: wpdb{}

Працює на основі:
wpdb::query() ,
wpdb::process_fields()

Хуків немає.

Повертає

int|false.

  • число– скільки рядків було опрацьовано
  • 0– запит було виконано коректно, але жодний рядок не було опрацьовано. Якщо в БД вже є дані і ви намагаєтеся оновити, вказавши такі самі дані, то wpdb::update() поверне 0.
  • false– Запит провалився або помилка запиту.

Так як повертається 0, якщо ніякі поля не були оновлені (змінені), але запит був виконаний коректно, перевірку результату запиту на помилку потрібно робити з урахуванням типу даних, що повертаються $res === false.

Використання

Global $wpdb;
$wpdb->update( $table, $data, $where, $format, $where_format );
$table
(рядок) (обов’язковий)
Назва таблиці, дані у якій потрібно оновити.
$data
(масив) (обов’язковий)

Дані, які потрібно оновити у форматі [ 'название колонки' => 'новое значение' ].

Якщо в значенні вказати NULL , то значення буде встановлено в NULL , відповідний формат при цьому ігнорується.

$where
(масив) (обов’язковий)
Асоційований масив з умовою вибірки рядків таблиці, дані в яких потрібно оновити (SQL WHERE). Формат масиву:
[ 'название колонки' => 'чему равно' ]. Якщо зазначити кілька елементів у масиві, то зазначені умови будуть об’єднані через
AND– тобто. повинні будуть збігтися всі умови, а не якесь одне. Якщо в значенні вказати
NULL, то в запиті отримаємо порівняння
IS NULL, відповідний формат при цьому ігнорується.
$format
(масив/рядок)

Масив форматів даних, які будуть асоційовані із зазначеними значеннями у параметрі $data . Якщо зазначений рядок, то він (формат) буде асоційований з усіма даними. При вказівці формату WordPress переводить передані дані у вказаний формат перед створенням запиту. Можливі формати:

  • %s– Рядок
  • %d– ціле число
  • %f– дробове число

Якщо не вказати, то для всіх значень $data буде вказано формат строка, якщо інше не зазначено у властивості wpdb::$field_types .
Типово: null

$where_format
(масив/рядок)
Теж саме
$format , тільки для
$where даних.


Типово: null

Приклади

0

#1 Оновимо рядок ID якого дорівнює 1

Значення першої колонки рядок, значення другої колонки число:

$wpdb->update( 'table',
	[ 'column1' => 'value1', 'column2' => $_GET['val'] ],
	[ 'ID' => 1 ]
);
0

#2 Теж саме із зазначенням типів переданих даних

$wpdb->update( 'table',
	[ 'column1' => 'value1', 'column2' => $_GET['val'] ],
	[ 'ID' => 1 ],
	[ '%s', '%d' ],
	[ '%d' ]
);
0

#3 Demo

$wpdb->update( 'table', [ 'column' => 'foo', 'field' => 'bar' ], [ 'ID' => 1 ] );
$wpdb->update( 'table', [ 'column' => 'foo', 'field' => 1337 ], [ 'ID' => 1 ], [ '%s', '%d' ), [ '% d']]);

нотатки

список змін

З версії 2.5.0Введено.

wpdb::update WP 6.0.2

public function update( $table, $data, $where, $format = null, $where_format = null ) {
	if ( ! is_array ( $ data ) | | ! is_array ( $ where ) ) {
		return false;
	}

	$data = $this->process_fields( $table, $data, $format );
	if (false === $data) {
		return false;
	}
	$where = $this->process_fields( $table, $where, $where_format );
	if ( false === $where ) {
		return false;
	}

	$fields = array();
	$conditions = array();
	$values ​​= array();
	foreach ( $data as $field => $value ) {
		if ( is_null( $value['value'] ) ) {
			$fields[] = "$field` = NULL";
			continue;
		}

		$fields[] = "$field` = " . $ value ['format'];
		$values[] = $value['value'];
	}
	foreach ( $where as $field => $value ) {
		if ( is_null( $value['value'] ) ) {
			$conditions[] = "$field` IS NULL";
			continue;
		}

		$conditions[] = "$field` = " . $ value ['format'];
		$values[] = $value['value'];
	}

	$fields = implode(', ', $fields);
	$conditions = implode( 'AND', $conditions );

	$sql = "UPDATE `$table` SET $fields WHERE $conditions";

	$this->check_current_query = false;
	return $this->query( $this->prepare( $sql, $values ​​) );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *