这是一个我遇到麻烦的错误。当我在Wordpress中使用dbDelta函数时会发生这种情况。我无法弄清楚,也许其他人有类似的经历?我的代码:
$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结构中没有任何东西需要更改。
答案 0 :(得分:7)
有点晚了 - 但在搜索相同错误消息的解决方案时发现了这个问题 - 我正在为发现此问题的其他人添加答案:
来自codex docs http://codex.wordpress.org/Creating_Tables_with_Plugins 的
- 您不得在字段名称周围使用任何撇号或反引号。
为我修好了
答案 1 :(得分:2)
我的问题是'create table'和表名之间有一个额外的空格。
我有:
$sqlOptions = "CREATE TABLE $options_table_name (
我需要的地方:
$sqlOptions = "CREATE TABLE $options_table_name (
挑剔功能
答案 2 :(得分:-2)
尝试 -
$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
}