dbDelta ALTER TABLE syntax?

时间:2013-01-08 作者:mehulved

由于数据库中的一些更改,我需要更改一个表以向其中添加一列,但即使函数正在运行,表也不会更改。下面是我编写的ALTER TABLE代码

$sql = "ALTER TABLE " . $packagetable . " ADD COLUMN price decimal(14,2) NOT NULL AFTER description;";
dbDelta($sql);
我在网上找不到带有dbDelta anywhere的ALTER TABLE的语法。编辑:在查看gravity forms插件中的ALTER TABLE语句后,我更新了单行语句。

2 个回复
SO网友:Tom J Nowell

您使用了dbDelta 功能不正确。

该函数的全部要点是传入一个表创建SQL命令。

如果表不存在,它将创建它。

If the table exists but doesn\'t match, 它会被修改,直到匹配为止。这包括添加和更新列、索引和其他方面。

因此,您要做的是运行dbDelta,并将其与表一起提供creation sql,而不是表alteration sql。

See here for the Codex\' take on adding an upgrade/alteration to a table using dbDelta

但它走得更远!dbDelta是一个挑剔的函数,您不能将任何SQL语句放在其中,它必须进行适当的格式化

以下是《法典》在同一页上的内容:

您必须在SQL语句中将每个字段放在自己的行上必须使用关键字key而不是其同义词索引,并且必须至少包含一个关键字和另一个:

dbDelta函数就像我之前在一篇文章中提到的那样,dbDelta函数能够检查当前的表结构,将其与所需的表结构进行比较,并根据需要添加或修改表,因此对于插件的更新非常方便。然而,与许多WordPress函数不同,dbDelta函数是最挑剔和最麻烦的函数。为了使dbDelta函数工作,必须满足一个fewcriteria。

您必须在SQL语句中将每个字段放在自己的行上必须使用关键字key而不是其同义词索引,并且必须至少包含一个关键字

SO网友:burlakvo

要将列添加到DB中的某个WP表中,可以使用$wpdb 对于it:

global $wpdb;

$table = $wpdb->prefix . \'my_table\';
$sql = "ALTER TABLE `{$table}`
        ADD `new_column` VARCHAR(20) NULL DEFAULT NULL;";

$query_result = $wpdb->query( $sql );
$wpdb->query() 根据,如果查询出错,则返回falsemethod\'s documentation. 因此,您可以编写一些if-else语句来处理成功或错误:

if ( $query_result === false ){
    // error occurred
} else {
    // success
}
如果需要在特殊列之后添加新列,只需使用AFTER 在查询中:

$sql = "ALTER TABLE `{$table}`
        ADD `new_column` VARCHAR(20) NULL DEFAULT NULL
        AFTER `exist_column`;";
还有,你可以改变

$sql = "ALTER TABLE `{$table}`
        MODIFY COLUMN `exist_column` VARCHAR(20) NULL DEFAULT NULL;";
或删除列

$sql = "ALTER TABLE `{$table}`
        MODIFY COLUMN `exist_column`;";
小提示:在PHP中,在双引号内("), 可以在花括号中使用变量("foo {$var} bar") 或者没有他们("foo $var bar") 将变量输入字符串,而不是串联("foo " . $var . " bar"). 我在上面的代码中使用它。了解更多有关string parsing in php.

结束

相关推荐

插件卸载:为什么在$wpdb->查询($DROP_SQL)之后运行DBDelta

我正在读专业的wordpress。他们卸载插件的代码是//build our query to delete our custom table $sql = \"DROP TABLE \" . $table_name . \";\"; //execute the query deleting the table $wpdb->query($sql); require_once(ABSPATH .’wp-admin/includes/upgrade.php’)