Wordpress dbDelta не работает - PullRequest
       55

Wordpress dbDelta не работает

1 голос
/ 29 августа 2011

В настоящее время я пишу плагин для клиента, и хотя он обычно работает хорошо, я обнаружил, что dbDelta не позволяет мне создавать таблицу, которая мне нужна для активации плагина.

Я запускаюкод ниже, чтобы связать функцию активации:

register_activation_hook(__FILE__, 'adminInstallation');

И это сама функция:

function adminInstallation(){
    global $wpdb;

    $objectEquipment = 'wp_object_equipment';
    $equipmentSQL = "CREATE TABLE ".$objectEquipment." (
                    id mediumint(9) NOT NULL AUTO_INCREMENT,
                    name tinytext NOT NULL
                );";

    require_once(ABSPATH.'wp-admin/includes/upgrade.php');
    $equipment = dbDelta($equipmentSQL);
}

После того, как это было выполнено, я проверяю базу данных, но таблиц не былодобавлено.Попытка вывести ошибку приведет к тому, что Wordpress сообщит мне, что произошел неожиданный вывод, но он не позволит мне увидеть реальное сообщение, которое возвращает сервер.Эта проблема беспокоила меня в течение нескольких часов, и я не могу продолжить, пока она не будет решена.Кто-нибудь здесь имеет какое-либо представление, почему он может это сделать?

Насколько я могу судить, весь код действителен, и это третий плагин, который я написал.Я даже пытался использовать код из моих предыдущих, но он тоже не работал.

РЕДАКТИРОВАТЬ: Я попытался запустить функцию после активации плагина и вывести ответ dbDelta.Он сообщает, что таблица была создана, но в базе данных нет ничего нового.Есть идеи?

Заранее спасибо!// Джонатан

Ответы [ 5 ]

3 голосов
/ 02 сентября 2016

Вы должны echo $wpdb->last_error; после вызова dbDelta, поэтому вы получаете ошибку mysql.

3 голосов
/ 17 марта 2012

С http://codex.wordpress.org/Creating_Tables_with_Plugins:

  • Вы должны поместить каждое поле в отдельной строке в своем выражении SQL.
  • Вы должны иметь два пробела между словами PRIMARY KEY и определением вашего первичного ключа.
  • Вы должны использовать ключевое слово KEY, а не его синоним INDEX, и вы должны включить хотя бы один KEY.
0 голосов
/ 13 мая 2019

Я ищу, и dbDelta выполняет $ wpdb-> query ($ sqlQuery);для пользовательских запросов.

Для тех, у кого dbDelta не работает, используйте

dbDelta($sql_query_to_create_table);

Спасибо!Приятного вам кода

0 голосов
/ 31 марта 2016

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

$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);
0 голосов
/ 19 октября 2011

Я знаю, что dbDelta очень требовательна к форматированию. Я считаю, что проблема в том, что вы не используете обратные символы (`) вокруг частей базы данных. Попробуйте следующее.

На заметку не мешало бы обозначить первичный ключ.

$equipmentSQL = "CREATE TABLE `".$objectEquipment."` (
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `name` tinytext NOT NULL,
  PRIMARY KEY (`id`)
);";
...