Как в вордпресс БД заменять данные в строке

Как в WP в таблице БД заменить нужные значения в строке. Использую

$result = $wpdb->replace( $table, $arr);

где

        $arr = array( 
            'id'            => setValue($data->data[$i]->id), 
            'home'          => setValue($data->data[$i]->number), 
            'book_status'   => setValue($status_ru[$data->data[$i]->status]),
            'rooms'         => setValue($data->data[$i]->rooms_amount),
            'phase'         => setValue($phase_ru[$data->data[$i]->sectionName]),
            'full_area'     => setValue($data->data[$i]->area->area_total),
            'life_area'     => setValue($data->data[$i]->area->area_living),
            'kitchen_area'  => setValue($data->data[$i]->area->area_kitchen),
            'price'         => setValue($data->data[$i]->price->value),                        
        );

В самой же строке таблицы БД всего 25 параметров из 9 приведенных. Применяю replace() и данная функция заменяет только 9 приведенных, остальные 16 параметров очищает.

Знаю, что есть еще функция update().

Но мне необходимо получить данные и если данные с таким ID есть в таблице, то обновить данные в строке в этим ID. Если такого ID нет в таблице, то добавить новую строку с этим ID. Поэтому принципу функция replace() казалось бы почти подходила.


Ответы (3 шт):

Автор решения: SeVlad

Как в WP в таблице БД заменить нужные значения

Если интересует как это сделать правильно, то
Вар1. С пом плагинов, работающий с сериализованными данными. Напр https://wordpress.org/plugins/better-search-replace/

Вар2. Скрипта https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Вар3. wp-cli

Если же речь о написании кода в своём плагине или теме, но нужно использовать функции ВП вида*update*.

→ Ссылка
Автор решения: KAGG Design

$wpdb->replace() всегда заменяет все поля таблицы. Если вы не указываете какие-то поля, то они будут очищены, что у вас и происходит.

Чтобы делать замену 9 из 25 полей, вам надо сначала выполнить get_row() с нужным id, заменить в полученном массиве 9 полей из 25, и записать полный массив из 25 элементов назад с помощью $wpdb->replace(). По-другому MySQL не работает.

→ Ссылка
Автор решения: Александр

Решил задачу так:

$row = $wpdb->get_row("SELECT id FROM $table WHERE id = ".$id );

if ( $row > 0 ) {
   // Есть данные
   $result = $wpdb->update( $table, $arr, array( 'id' => $id ) );
} else {
   // нет данных
   $result = $wpdb->insert( $table, $arr);
}
→ Ссылка