$wpdb - использование БД в 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