由于我的插件的数据库发生了一些变化,我需要更改一个表来为它添加一些列,但即使该函数正在运行,表也不会改变。这是我写的函数
$sql = "ALTER TABLE `wp_tnt_videos` ADD `date_created` INT NOT NULL DEFAULT '0' AFTER `video_order`, ADD `date_modified` INT NOT NULL DEFAULT '0' AFTER `date_created`, ADD `user_id` INT NOT NULL DEFAULT '0' AFTER `date_modified`;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
我读到了这个:http://hungred.com/how-to/wordpress-dbdelta-function/ 并试着仔细检查sql命令。我也在mysql中运行sql命令,它工作! 所以,请帮帮我! :|
答案 0 :(得分:3)
您的答案在法典中:
- 您必须在SQL语句中将每个字段放在自己的行中。
- 单词PRIMARY KEY和定义之间必须有两个空格 您的主键。
- 您必须使用关键字KEY而不是其同义词INDEX,并且您必须至少包含一个KEY。
- 您不得在字段名称周围使用任何撇号或反引号。
http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function
首先,你有关于字段名称的反引号。该规则也可能适用于表名,但我不确定。
此外,您正在尝试使用dbDelta
,就好像您正在直接查询数据库一样。它不起作用。您需要使用CREATE TABLE
为其提供完整的所需表格结构,就好像您每次创建新内容一样......
dbDelta函数检查当前表结构,进行比较 到所需的表结构,并添加或修改表 必要时,它可以非常方便更新(见 有关如何使用dbDelta的更多示例,请参阅wp-admin / upgrade-schema.php。
http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function
您不会给它ALTER TABLE
命令或只提供您想要更改的部分。它不是那种通用的数据库更改工具。而且,正如已经提到的,它非常挑剔。格式化您的SQL与示例中的格式完全相同,包括换行符。
我想补充一点,你需要非常仔细地观察这个功能。它无声地失败,似乎没有做某些事情,比如删除索引 - 至少我遇到了很多麻烦。我不确定它是否会移动列来插入新的列或只是添加到最后。
答案 1 :(得分:0)
您只需执行以下SQL命令:
global $wpdb;
$wpdb->query($sql);