Функция dbDelta в WordPress

В нескольких прошлых статьях мы уже рассматривали класс wpdb для работы с базой данных в WordPress - класс wpdb. Этот позволяет выполнять любые SQL запросы. В этой статье мы рассмотрим функцию dbDelta, которая позволяет создавать или изменять таблицы, поля и индексы, изменять структуру таблиц.

Функция 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);
При выполнении этого запроса будет изменена существующая таблица.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: