dbDelta不会改变表格

时间:2014-06-06 18:16:13

标签: php mysqli wordpress-plugin

我正在尝试在表格中添加一个字段:

$tables = array(Gun => 6,Color => 2,Holster => 2,Canter => 1,Hand => 1);
foreach($tables as $key => $val) {
    $table_name = $wpdb->prefix . 'GunInventory'.$key;
    $sql = "CREATE TABLE $table_name (
            GunInventory".$key."Id int(11) NOT NULL AUTO_INCREMENT,
            Name varchar(200) NOT NULL,
            Value char(".$val.") NOT NULL,
            Price decimal(10,2) NOT NULL,
            Order INT NOT NULL,
            UNIQUE KEY  GunInventory".$key."Id (GunInventory".$key."Id)
        );";
    dbDelta($sql);
}

问题是我的表上没有创建订单字段,我尝试从表中删除字段并重新安装插件,我的表保持不变。该脚本将创建表。

我尝试启用调试,但没有任何错误。

3 个答案:

答案 0 :(得分:1)

Order是保留字。

所有保留字的列表:

http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

答案 1 :(得分:0)

ORDER是MYSQL中的保留关键字。要么使用反引号(`)来逃避它,要么选择一个不同的名称。有关详细信息,请参阅this post

如果启用错误报告,除非数组中的那些键是常量,否则您的页面上应该有警告。

  

注意:使用未定义的常量枪 - 假定'枪'在...中   注意:使用未定义的常量颜色 - 在...中假定为“颜色”   等

http://3v4l.org/8PLuh

它起作用的原因是这些键是由PHP转换的,但是you should really quote themenable error reporting

答案 2 :(得分:0)

Ordermysql个保留关键字。不应该使用它。

您的数组定义似乎并不完美。您将键指定为常量。这不是一个好习惯。

http://www.php.net/manual/en/language.types.array.php

$tables = array(Gun => 6,Color => 2,Holster => 2,Canter => 1,Hand => 1);

应该是

$tables = array("Gun" => 6,"Color" => 2,"Holster" => 2,"Canter" => 1,"Hand" => 1);