我正在开发一个插件。我想通过插件创建一个表格。因此,我正在尝试执行以下SQL查询。
global $wpdb;
$createSQL = "
CREATE TABLE `". $wpdb->prefix ."_book_ratings` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`book_id` bigint(20) UNSIGNED NOT NULL,
`rating` float(3.1) UNSIGNED NOT NULL,
`user_ip` varchar(32) NOT NULL
) ENGINE=InnoDB" . $wpdb->get_charset_collate() . " AUTO_INCREMENT=1;
";
require( ABSPATH . '/wp-admin/includes/upgrade.php' );
dbDelta( $createSQL );
当我禁用插件和重新激活插件时,我将得到以下错误。
The plugin generated 464 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.
请让我知道我哪里错了。
发布于 2018-10-22 06:23:33
查看$createSQL
中的SQL查询,
ENGINE=InnoDB" . $wpdb->get_charset_collate() . " AUTO_INCREMENT=1;
的结果是:查询错误(1286):未知存储引擎'InnoDBDEFAULT‘来修复它,在ENGINE=InnoDB
(存储引擎)和" . $wpdb->get_charset_collate()
(字符集)之间添加一个空格。id
定义为AUTO_INCREMENT
,但该列不是键,这会导致以下错误:查询中的错误(1075):表定义错误;只能有一个auto列,必须将其定义为一个键来修复它,使用PRIMARY KEY (id)
或KEY(id)
将列id
定义为一个键。因此,下面是在WordPress 4.9.8上尝试和测试的固定代码(或SQL ):
$createSQL = "
CREATE TABLE `". $wpdb->prefix ."_book_ratings` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`book_id` bigint(20) UNSIGNED NOT NULL,
`rating` float(3.1) UNSIGNED NOT NULL,
`user_ip` varchar(32) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB " . $wpdb->get_charset_collate() . " AUTO_INCREMENT=1;
";
如果这不适用于您,请遵循指南这里,例如在单词主键和主键定义之间使用两个空格。
https://wordpress.stackexchange.com/questions/317280
复制相似问题