Функция dbDelta()
в WordPress используется для создания новых таблиц в базе данных или обновления структуры существующих таблиц. Она особенно полезна при разработке плагинов и тем, когда необходимо добавить свои таблицы для хранения данных.
dbDelta( string[]|string $queries = ”, bool $execute = true ): array
Параметры:
$queries
(строка или массив строк): SQL-запросы для выполнения. Можно передать строку с несколькими запросами, разделенными точкой с запятой, или массив запросов.$execute
(логический): Указывает, нужно ли выполнять запросы сразу же. По умолчанию —true
.
Возвращаемое значение:
- Массив строк с результатами выполнения SQL-запросов. Это может быть сообщение об успешном создании таблицы или обновлении её структуры.
Описание функции dbDelta()
Функция dbDelta()
анализирует переданный SQL-запрос для создания таблицы и применяет необходимые изменения к базе данных. Она работает только с запросами CREATE TABLE
и не поддерживает ALTER TABLE
. Перед использованием dbDelta()
важно подключить файл upgrade.php
, иначе вызов функции приведет к ошибке.
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
Пример 1: Создание таблицы для хранения информации о заказах
В этом примере создается таблица с именем {префикс}orders
для хранения данных о заказах.
function create_orders_table() {
global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$table_name = $wpdb->prefix . 'orders';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$table_name} (
order_id BIGINT(20) unsigned NOT NULL auto_increment,
customer_name VARCHAR(255) NOT NULL default '',
order_date DATETIME NOT NULL default '0000-00-00 00:00:00',
product_name VARCHAR(255) NOT NULL default '',
PRIMARY KEY (order_id),
KEY customer_name (customer_name)
) $charset_collate;";
dbDelta( $sql );
}
create_orders_table();
Результат: Создается таблица {префикс}orders
, содержащая столбцы order_id
, customer_name
, order_date
и product_name
. order_id
установлен как первичный ключ, а по customer_name
создается индекс.
Пример 2: Добавление колонки к существующей таблице
Функция dbDelta()
позволяет добавлять новые столбцы в уже существующие таблицы. В следующем примере в таблицу orders
добавляется колонка customer_email
.
function add_customer_email_column() {
global $wpdb;
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$table_name = $wpdb->prefix . 'orders';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$table_name} (
order_id BIGINT(20) unsigned NOT NULL auto_increment,
customer_name VARCHAR(255) NOT NULL default '',
customer_email VARCHAR(255) NOT NULL default '',
order_date DATETIME NOT NULL default '0000-00-00 00:00:00',
product_name VARCHAR(255) NOT NULL default '',
PRIMARY KEY (order_id),
KEY customer_name (customer_name)
) $charset_collate;";
dbDelta( $sql );
}
add_customer_email_column();
Результат: В таблицу добавляется столбец customer_email
.
Пример 3: Проверка успешности создания таблицы
При создании таблицы с помощью dbDelta()
рекомендуется проверять, была ли она действительно создана.
function check_table_creation() {
global $wpdb;
$table_name = $wpdb->prefix . 'orders';
if ( $wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name ) {
// Таблица не была создана!
error_log("Таблица {$table_name} не была создана.");
}
}
check_table_creation();
Особенности использования dbDelta()
- Уникальные ключи и индексы. В случае указания
UNIQUE
для столбца, индекс создается автоматически. - Case-sensitive. Типы данных должны быть указаны в нижнем регистре (например,
varchar(50)
). - Ограничения. Функция не поддерживает удаление полей и индексов, также нельзя добавлять новые поля с автоинкрементом и
PRIMARY KEY
в уже существующую таблицу.
Заключение
Функция dbDelta()
удобна для создания и обновления таблиц в базе данных WordPress. Хотя она обладает ограничениями, ее использование позволяет избежать дополнительных SQL-запросов и вручную управлять структурой таблиц.