Обновляет указанные данные в указанной строке таблицы.
Метод включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
...
Хуков нет.
Возвращает
Число/false.
число
- сколько строк было обработано0
- запрос был выполнен корректно, но ни одна строка не была обработана. Если в БД уже есть данные и вы пытаетесь обновить, указав точно такие же данные, то wpdb::update() вернет 0.false
- запрос провалился или ошибка запроса.
Так как возвращается 0, если никакие поля не были обновлены (изменены), но запрос был выполнен корректно, проверку результата запроса на ошибку нужно делать с учетом типа возвращаемых данных $res === false
.
Использование
global $wpdb; $wpdb->update( $table, $data, $where, $format, $where_format );
- $table(строка) (обязательный)
- Название таблицы, данные в которой нужно обновить.
- $data(массив) (обязательный)
Данные, которые нужно обновить в формате
[ 'название колонки' => 'новое значение' ]
.Если в значении указать NULL, то в значение будет установлено в NULL, соответствующий формат при этом игнорируется.
- $where(массив)
- Ассоциированный массив с условием замены (WHERE) в формате
[ 'название колонки' => 'чему равно' ]
. Несколько условий будут объеденные черезAND
. Если в значении указатьNULL
то в запросе получим сравнениеIS NULL
, соответствующий формат при этом игнорируется. - $format(массив/строка)
Массив форматов данных которые будут ассоциированы с указанными значениями в параметре $data. Если указана строка, то она (формат) будет ассоциирован со всеми данными. При указании формата, WordPress переводит переданные данные в указанный формат перед созданием запроса. Возможные форматы:
%s
- строка%d
- целое число%f
- дробное число
Если не указать, то для всех значений $data будет указан формат
строка
, если иное не указано в свойстве wpdb::$field_types.
По умолчанию: null- $where_format(массив/строка)
- Тоже самое что и $format, только для $where данных.
По умолчанию: null
Примеры
#1. Обновим строку ID которой равен 1
Значение первой колонки строка, значение второй колонки число:
$wpdb->update( 'table', [ 'column1' => 'value1', 'column2' => $_GET['val'] ], [ 'ID' => 1 ] );
#2. Тоже самое с указанием типов передаваемых данных
$wpdb->update( 'table', [ 'column1' => 'value1', 'column2' => $_GET['val'] ], [ 'ID' => 1 ], [ '%s', '%d' ], [ '%d' ] );
Заметки
- Смотрите: wpdb::prepare()
- Смотрите: wpdb::$field_types
- Смотрите: wp_set_wpdb_vars()
Список изменений
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 ) ); }