$wpdb - использование БД в WordPress

Категория: WordPress

Методы для получения и сохранения данных в БД WordPress. Примеры подготовки и выполнения запросов.

Экранирование данных

Для экранирования данных запросов, которые вы не можете выполнить через prepare() - используйте ф-цию esc_sql(). Экранировать можно как строки так и массивы параметров:

esc_sql($escaped_data);

Отладка

Включить/выключить вывод ошибок:

$wpdb->show_errors();
$wpdb->hide_errors();
$wpdb->print_error();

Select

Формат результата

Вы можете указать формат в котором желаете получить данные с помощью параметра $output_type. Доступные форматы данных: ARRAY_A, ARRAY_N, OBJECT, OBJECT_K. По умолчанию результат запроса возвращается как объект: OBJECT.

Простой запрос выборки записей:

$sql = 'SELECT id, name FROM mytable';
$rows = $wpdb->get_results($sql, $output_type = OBJECT);

See: https://codex.wordpress.org/Class_Reference/ru:wpdb_Class#.D0.92.D1.8B.D0.B1.D0.BE.D1.80.D0.BA.D0.B0.28SELECT.29_Generic_Results

Подготовка и выполнение запроса:

$sql = "SELECT option_name FROM wp_options WHERE option_name LIKE 'post_target_%' AND option_value = %d;";
$sql = $wpdb->prepare($sql, $post_id);
$value = $wpdb->get_var($sql);
Форматы переменных: %s - строка, %d - число, %f - float, %% - символ процента

Получить строку:

$wpdb->get_row($sql, $output_type, $row_offset = 0);

Получить поле:

$wpdb->get_var($sql, $column_offset = 0, $row_offset = 0);

Получить колонку:

$wpdb->get_col($sql, $column_offset = 0);

Пример комплексного запроса:

$variationIds = [1,2,3];
$sql = "SELECT min(meta_value) FROM $wpdb->postmeta
        WHERE meta_key = '_price'
        AND post_id IN (
            SELECT post_id
            FROM $wpdb->postmeta
            WHERE post_id IN (".implode(',', $variationIds).")
            AND (
                meta_key = %s
                AND meta_value = %s
            )
        )";

$sql = $wpdb->prepare($sql, 'attribute_rom', '8 Гб');
$minPrice = $wpdb->get_var($sql);

Insert

Вставить запись:

$data = ['string' => '', 'integer' => 0];
$wpdb->insert($table, $data, $formats = ['%s', '%d']);
$id = $wpdb->insert_id;

Update

Обновление строки:

$wpdb->update($table, $data, $where, $formats = ['%s', '%d'], $where_format = null );
## Пример:
$data = [ 
  'column1' => 'value1',  // string
  'column2' => 'value2'   // integer (number) 
];
$wpdb->update('table', $data, ['ID' => 1], ['%s', '%d'], ['%d']);

Удаление

Удалить опциий по названию и значению:

$sql = "DELETE FROM $wpdb->options 
        WHERE option_name LIKE 'my_plugin_option_%'
        AND option_value = %d";
$success = $wpdb->query($wpdb->prepare($sql, $id));

Кеш

Кешированные данные:

$wpdb->last_result;
$wpdb->last_query;

Очистить кеш:

$wpdb->flush();

Прочее

Информация о столбце:

$wpdb->get_col_info($info_type, $offset = -1); // -1 for all columns

See: https://codex.wordpress.org/Class_Reference/ru:wpdb_Class#Getting_Column_Information

Также, для получения данных из базы используется класс WP_Query, который позволяет получать посты по заданным критериям.

#wpdb, #база данных WP, #wp db use