2

由于我的插件的数据库发生了一些变化,我需要更改一个表以向其中添加一些列,但即使该函数正在运行,该表也不会被更改。这是我写的函数

    $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 命令并且它工作!所以,请帮助我!:|

4

2 回答 2

4

您的答案在法典中:

  • 您必须在 SQL 语句中将每个字段放在自己的行中。
  • PRIMARY KEY 和主键定义之间必须有两个空格。
  • 您必须使用关键字 KEY 而不是其同义词 INDEX,并且您必须至少包含一个 KEY。
  • 不得在字段名称周围使用任何撇号或反引号。

http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function

一方面,您在字段名称周围有反引号。该规则可能也适用于表名,但我不确定。

此外,您尝试使用dbDelta就像对数据库进行直接查询一样。它不是那样工作的。您需要为其提供完整的所需表结构CREATE TABLE,就好像您每次都在创建新的一样......

dbDelta 函数检查当前表结构,将其与所需的表结构进行比较,并根据需要添加或修改表,因此它对于更新非常方便(请参阅 wp-admin/upgrade-schema.php 以获得更多示例如何使用 dbDelta)。

http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function

你不给它ALTER TABLE命令或只给它你想要改变的部分。它不是那种通用的数据库更改工具。而且,正如已经提到的,它非常挑剔。完全按照示例中的格式格式化您的 SQL,包括换行符。

我要补充一点,您需要非常仔细地观察此功能。它默默地失败了,似乎不应该做某些事情,比如删除索引——至少我在这方面遇到了很多麻烦。我不确定它是否会移动列以插入新列或只是添加到末尾。

于 2013-01-27T16:49:53.350 回答
2

你只需要像这样执行你的 SQL 命令:

global $wpdb;
$wpdb->query($sql);
于 2018-02-07T11:48:42.757 回答