Функция dbDelta не определена по умолчанию. Чтобы использовать её, необходимо подключить файле этой функцией:
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
Функцию dbDelta лучше всего использовать для создания таблиц, полей, индексов и изменения существующей структуры полей. Не стоит использовать её для удаления полей и индексов, а так же для изменения структуры индексов.
Аргументы функции dbDelta
dbDelta( $queries, $execute );
Название | Тип данных | Описание |
---|---|---|
$queries | строка/массив | SQL запрос или массив из SQL запросов. |
$execute | логический | Выполнять ли запрос или нет. По умолчанию: "true" - выполнять |
- Каждое поле SQL запроса должно начинаться с новой строки. Но не должно быть пустых строк.
- В SQL запросе тип поля нужно писать строчными буквами: varchar, int и т.п.
- В SQL запросе нужно указывать длину поля, если у него может быть длина: varchar(15), int(12) и т.п.
- Во время создания составных индексов нужно разделять название полей запятой без последующего пробела:
KEY поле1 (поле1,поле2)
Создание таблицы с помощью dbDelta
Рассмотрим пример создания таблицы с помощью функции "dbDelta":require_once ABSPATH . 'wp-admin/includes/upgrade.php';
$table = $wpdb->get_blog_prefix() . 'food';
$charset = "DEFAULT CHARACTER SET " . $wpdb->charset . " COLLATE " . $wpdb->collate;
$sql = "CREATE TABLE " . $table . " (
id int(10) unsigned NOT NULL auto_increment,
name varchar(50) NOT NULL default '',
description varchar(255) NOT NULL default '',
PRIMARY KEY (id)
)
" . $charset . ";";
dbDelta($sql);
Добавление колонки в таблицу с помощью dbDelta
Добавим колонку "taste" с типом "longtext" в таблицу, которую создали в предыдущем абзаце. Для этого мы используем запрос для создания таблицы. Функция "dbDelta" проверит не создана ли эта таблица. А таблица существует, поэтому функция изменит запрос так, чтобы произошло изменение, а не создание:require_once ABSPATH . 'wp-admin/includes/upgrade.php';
$table = $wpdb->get_blog_prefix() . 'food';
$charset = "DEFAULT CHARACTER SET " . $wpdb->charset . " COLLATE " . $wpdb->collate;
$sql = "CREATE TABLE " . $table . " (
id int(10) unsigned NOT NULL auto_increment,
name varchar(50) NOT NULL default '',
description varchar(255) NOT NULL default '',
taste longtext NOT NULL default '',
PRIMARY KEY (id)
)
" . $charset . ";";
dbDelta($sql);
При выполнении этого запроса будет изменена существующая таблица.