Я просмотрел множество потоков, страницу кодекса и пытался связываться со многими вещами, но мой код, похоже, не создает таблицы. И я не могу понять, где я иду не так. Я проверил booking_db_version в базе данных, она обновляется, когда я обновляю ее в файле.
Вот код
global $booking_db_version;
$booking_db_version = "1.0.0";
function booking_install() {
global $wpdb;
global $booking_db_version;
global $tableprefix;
$installed_version = get_option('booking_db_option');
$tableprefix = $wpdb->prefix . 'booking_';
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
if ( $installed_version !== $booking_db_version ) {
/* Create table for packages */
$packagetable = $tableprefix . 'packages';
$sql = "create table $packagetable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
description text NOT NULL,
city1 text NOT NULL,
city2 text NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for hotels */
$hoteltable = $tableprefix . 'hotels';
$sql = "create table $hoteltable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
city text NOT NULL,
price decimal(10,2) NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for addons */
$addontable = $tableprefix . 'addons';
$sql = "create table $addontable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
addongroup text NOT NULL,
price decimal(10,2) NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
/* Create table for addon groups */
$addongrouptable = $tableprefix . 'addon_groups';
$sql = "create table $addongrouptable (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name text NOT NULL,
perhead text NOT NULL,
PRIMARY KEY (id)
);";
dbDelta($sql);
update_option('booking_db_version', $booking_db_version);
}
}
register_activation_hook(__FILE__, 'booking_install');
источник
CREATE TABLE
приведет к ее провалу.PRIMARY KEY (id),
. На самом деле dbDelta говорит, что создает таблицу, хотя и неPRIMARY KEY (id),
- это проблема SQL, а не проблемы dbDelta и WP. Следовательно, нет документации.dbDelta()
вы можете передавать свои SQL в виде массива,dbDelta
а не вызывать их поdbDelta
отдельности для каждого запроса.Вы можете попробовать эту функцию :
источник
Использование «CREATE TABLE» вместо «создать таблицу» решило проблему для меня.
источник
Помимо всех этих важных моментов, вы должны активировать ловушку активации.
В то время как вы разработали свой плагин и написали правильный код, вам все равно нужно повторно активировать ваш плагин, чтобы вызвать ловушку, поэтому ваша таблица будет создана при активации плагина.
источник
Ключевые слова SQL, такие как CREATE TABLE и UPDATE, должны быть в верхнем регистре. поэтому измените строку создания таблицы на:
и
чтобы:
или это:
чтобы:
и так далее
источник
CREATE TABLE
,CREATE DATABASE
,INSERT INTO
иUPDATE
. Все остальное либо не используется в сравнении с учетом регистра, либо преобразуется в нижний регистр . Ваши предложения не имеют никакого эффекта.