向wordpress数据库添加新列

Olk*_*afa 4 php mysql sql wordpress

我尝试更新我的插件.所以我必须升级mysql_table.但是在尝试新列时,程序会获得异常.

这是我目前的表格:

$sql = "CREATE TABLE  {$table_name} (
        say_id             int(11)   not null AUTO_INCREMENT,
        customer_mail      text      not null,
        customer_name  text      not null,
        customer_messagge      text      not null,
        messagge_date_time  datetime  not null,

        PRIMARY KEY (say_id)
        )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";

        require_once(ABSPATH . "wp-admin/includes/upgrade.php");
        dbDelta($sql);
Run Code Online (Sandbox Code Playgroud)

现在我添加colum更多一个表.我尝试Alter表,这个工作一次并添加一个列但是再刷新一次我得到了这个错误.

这是我的代码

$wpdb->query("ALTER TABLE wp_customer_say ADD say_state INT(1) NOT NULL DEFAULT 1");
Run Code Online (Sandbox Code Playgroud)

这是我的错误

WordPress数据库错误:[重复列名'say_state'] ALTER TABLE wp_customer_say ADD say_state INT(1)NOT NULL DEFAULT 1

我看到这个错误,我试试这个;

$query          = $wpdb->query("select * from wp_customer_say");
        $respond        = mysql_num_fields( $query );
        $column_array   = array();

        for($i = 0; $i < $respond ; $i++):
            $column_array[]     = mysql_field_name($query,$i);
        endfor;

        if( !in_array("say_state",$column_array) ):
            $wpdb->query("ALTER TABLE wp_customer_say ADD say_state INT(1) NOT NULL DEFAULT 1");
        endif;
Run Code Online (Sandbox Code Playgroud)

我收到这个错误.

Warning: mysql_num_fields() expects parameter 1 to be resource, integer given in
Run Code Online (Sandbox Code Playgroud)

请帮忙.谢谢.抱歉坏英语.

Add*_*ddy 12

使用此查询.我通过快速查询只使用mysql-standred获取字段名称,这将解决您的问题:

$row = $wpdb->get_results(  "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'wp_customer_say' AND column_name = 'say_state'"  );

if(empty($row)){
   $wpdb->query("ALTER TABLE wp_customer_say ADD say_state INT(1) NOT NULL DEFAULT 1");
}
Run Code Online (Sandbox Code Playgroud)


Rik*_*esh 5

您可以使用以下方式检查WordPress中是否存在列名,

$myCustomer = $wpdb->get_row("SELECT * FROM wp_customer_say");
//Add column if not present.
if(!isset($myCustomer->say_state)){
    $wpdb->query("ALTER TABLE wp_customer_say ADD say_state INT(1) NOT NULL DEFAULT 1");
}
Run Code Online (Sandbox Code Playgroud)

  • 干得好,效果很好.我基于此添加了[我自己的答案](/sf/answers/3408392571/).基本上只是工作确保我们不硬编码任何我们不需要的东西.+1 (2认同)
  • **否,它永远不会工作!**如果表中没有行(例如,新表或空表),它将失败。 (2认同)