Intereting Posts
Как ограничить отображаемые сообщения в wordpress получать комментарии и получать сообщения в цикле Как изменить стиль комментария комментария Disqus на главной странице Получены ли плагиновые переводы, автоматически установленные в WordPress? Добавить пользовательское поле в поле комментариев ПОСЛЕ текстовой области НО ПЕРЕД отправкой кнопки «Быстрое редактирование»> обновление очищает мои пользовательские мета значения Строка замените название сайта WordPress get_category_link () для персонализированного типа сообщения не включает пользовательскую переустановку slug? Добавить видео с youtube в сообщении Как я могу напрямую связать себя с загруженными файлами? Проблема публикации комментариев в WordPress Заголовки в моем боковом виджжете отображаются на всех языках – с qtranslate Заказ изображений галереи без использования короткого кода в теме Загрузить gravatar в профиле WP? Пользовательский цикл с несколькими таксономическими запросами

dbDelta не создает таблицы

Я прошел через множество потоков, страницы кода и попытался возиться с множеством вещей, но мой код, похоже, не создает таблицы. И я не могу понять, где я ошибаюсь. Я проверил 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'); 

Solutions Collecting From Web of "dbDelta не создает таблицы"

Из WordPress-codex о dbDelta :

Функция dbDelta анализирует текущую структуру таблицы, сравнивает ее с желаемой структурой таблицы и добавляет или изменяет таблицу по мере необходимости, поэтому она может быть очень удобной для обновлений (см. Wp-admin / upgrade-schema.php для получения дополнительных примеров как использовать dbDelta). Обратите внимание, что функция dbDelta довольно сложная. Например:

  • Вы должны поместить каждое поле в свою строку в свой оператор SQL.
  • У вас должно быть два пробела между словами PRIMARY KEY и определением вашего первичного ключа.
  • Вы должны использовать ключевое слово KEY, а не его синоним INDEX, и вы должны включить хотя бы один КЛЮЧ.
  • Вы не должны использовать какие-либо апострофы или обратные ссылки вокруг имен полей.

С этими оговорками, вот следующие строки в нашей функции, которые фактически создадут или обновят таблицу. Вам нужно будет заменить свою собственную структуру таблицы в переменной $ sql.

Я изменил ваш sql: "create table $packagetable (

К этому: "CREATE TABLE " . $packagetable . " ( "CREATE TABLE " . $packagetable . " (

Вот рабочая копия вашего кода:

 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 INT NOT NULL AUTO_INCREMENT, name TEXT NOT NULL, description TEXT NOT NULL, city1 TEXT NOT NULL, city2 TEXT NOT NULL, PRIMARY KEY (id) ) ". $charset_collate .";"; 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) ) ". $charset_collate .";"; 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) ) ". $charset_collate .";"; 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) ) ". $charset_collate .";"; dbDelta($sql); update_option('booking_db_version', $booking_db_version); } } register_activation_hook(__FILE__, 'booking_install'); 

Вы можете попробовать эту функцию :

 $table_name = "ratings"; $table_columns = "id INT(6) UNSIGNED AUTO_INCREMENT, rate tinyint(1) NOT NULL, ticket_id bigint(20) NOT NULL, response_id bigint(20) NOT NULL, created_at TIMESTAMP"; $table_keys = "PRIMARY KEY (id), KEY ratings_rate (rate), UNIQUE KEY ratings_response_id (response_id)"; create_table($table_name, $table_columns, $table_keys); 

Использование «CREATE TABLE» вместо «create table» решило проблему для меня.

Ключевые слова SQL, такие как CREATE TABLE и UPDATE, должны быть прописными. поэтому измените строку таблицы create на:

 "CREATE TABLE " . $packagetable . "( 

а также

 id mediumint(9) NOT NULL AUTO_INCREMENT, 

чтобы:

 id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, 

или это:

 name text NOT NULL, 

чтобы:

 name TEXT NOT NULL, 

и так далее