Ошибка dbDelta / SQL, очень неожиданная - PullRequest
2 голосов
/ 29 июня 2011

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

$sql1 = "CREATE TABLE `".$table_name1."` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT  PRIMARY KEY ,
`blogid` INT( 11 ) NOT NULL ,
`symbol` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM";

Я запускаю этот код во время действия theme_switch. И, кажется, это не происходит, когда я включаю тему, только когда я переключаюсь на что-то другое (я знаю, это странно). Я прочитал и попытался следовать предостережениям, упомянутым на Wordpress.org , например, поставить два пробела между первичным ключом и определением. У меня есть два других похожих кода SQL-кода, которые генерируют ту же ошибку; все три были изначально созданы phpMyAdmin, поэтому я знаю, что они работают.

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php on line 1463

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php on line 1463

Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php on line 1463

WordPress database error: [Multiple primary key defined]
ALTER TABLE wp_stocks_0 CHANGE COLUMN id `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/wp-experiment/wp-admin/includes/upgrade.php:1463) in /Applications/MAMP/htdocs/wp-experiment/wp-includes/pluggable.php on line 897

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

Ответы [ 3 ]

7 голосов
/ 21 февраля 2013

Немного поздно - но обнаружил этот вопрос при поиске решения тех же сообщений об ошибках - я добавляю ответ для всех, кто обнаружит это:

из кодекса документов http://codex.wordpress.org/Creating_Tables_with_Plugins

  • Вы не должны использовать апострофы или обратные метки вокруг имен полей.

Это исправило это для меня

2 голосов
/ 07 марта 2013

Моя проблема заключалась в том, что у меня было дополнительное пространство между 'create table' и именем таблицы.

У меня было:

$sqlOptions = "CREATE TABLE  $options_table_name (

Где мне нужно было:

$sqlOptions = "CREATE TABLE $options_table_name (

Придирчивая функция

0 голосов
/ 29 июня 2011

Попробуйте -

$sql1 = "CREATE TABLE `".$table_name1."` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`blogid` int(11) NOT NULL,
`symbol` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM";

По моему опыту, dbDelta даже более возмутительно, чем на это ссылается в Кодексе.

Обновление
Исходя из ваших правок, я бы посоветовал вам сначала проверить / создать базу данных, только если она еще не существует, что вы можете сделать, используя -

global $wpdb;

if ($wpdb->get_var("show tables like `" . $wpdb->prefix . $table_name1 . "`") != $wpdb->prefix . $table_name1) {
  // your dbDelta query here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...