你没有使用dbDelta()
这里,当您使用IF NOT EXISTS
条款
使用IF NOT EXISTS
当您使用IF NOT EXISTS
签入:
CREATE TABLE IF NOT EXISTS
那么
dbDelta()
将进行以下匹配:
if ( preg_match( "|CREATE TABLE ([^ ]*)|", $qry, $matches ) ) {
$cqueries[ trim( $matches[1], \'`\' ) ] = $qry;
在这里
$matches
是:
Array
(
[0] => CREATE TABLE IF
[1] => IF
)
以及
trim( $matches[1], \'`\' )
给出表名
IF
.
然后,它将尝试查找包含以下内容的字段:
$tablefields = $wpdb->get_results("DESCRIBE {$table};");
或
DESCRIBE IF
这(希望)不会产生任何结果。因此
dbDelta()
将只尝试运行原始创建查询,但跳过将来可能对表结构进行的任何更新。
没有IF NOT EXISTS
如果删除IF NOT EXISTS
部分,然后是第一个运行时,例如wp_wpe_query_part
表,将是
CREATE TABLE IF NOT EXISTS wp_wpe_query_part (
`id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`part_value` int(11) NOT NULL,
`part_name` varchar(200) NOT NULL,
`user_ip` varchar(50) NOT NULL,
`reply_cdate` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8
对于第二个运行时,当表已经存在时,我们将得到以下查询:
DESCRIBE wp_wpe_query_part;
SHOW INDEX FROM wp_wpe_query_part;
ALTER TABLE wp_wpe_query_partCHANGE COLUMN id `id` int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY;
ALTER TABLE wp_wpe_query_partCHANGE COLUMN part_value `part_value` int(11) NOT NULL;
ALTER TABLE wp_wpe_query_partCHANGE COLUMN part_name `part_name` varchar(200) NOT NULL;
ALTER TABLE wp_wpe_query_partCHANGE COLUMN user_ip `user_ip` varchar(50) NOT NULL;
ALTER TABLE wp_wpe_query_partCHANGE COLUMN reply_cdate `reply_cdate` DATETIME DEFAULT CURRENT_TIMESTAMP;
如果我们稍后对表结构进行一些更改,它将相应地修改当前表。