dbDelta with the character ;

时间:2019-01-02 作者:J.BizMai

为了管理数据库插件更新,我使用dbDelta.

old code

myfunction(){
   ...
   $query_string = "INSERT INTO {$table_name} {$str_column_names} VALUES {$str_values}";

   $is_data_inserted = $wpdb->query( $query_string );

   if( !$is_data_inserted ){
       $message_error = sprintf( "impossible to insert the data %s for the table %s!",
       serialize( $data_item_attrs ),
            $table_name
        );
        $wpdb->show_errors();
        wp_error_log( $message_error, "Insert Data Error" );
        return false;
    }
    return true;
}

new code

myfunction(){
   ...
   $query_string = "INSERT INTO {$table_name} {$str_column_names} VALUES {$str_values}";
   dbDelta( $query_string ); 
}
我的问题是使用dbDelta 干扰包含字符“;”的插入。这是因为dbDelta, 有“;”作为分隔符。

我怎样才能解决这个问题?

1 个回复
最合适的回答,由SO网友:J.BizMai 整理而成

原因如下:

功能dbDelta 可以接收为第一个参数($queries) 数组或字符串。如果$queries 是字符串,dbDelta 将使用“;”创建一个数组作为分隔符。

inside dbDelta

if ( !is_array($queries) ) {
    $queries = explode( \';\', $queries );
    $queries = array_filter( $queries );
}
因此,解决方案是创建一个查询数组,而不是字符串作为第一个参数,如下所示:

myFunction(){
    ...
    $query_string = array(
        0 => "INSERT INTO {$table_name} {$str_column_names} VALUES {$str_values}"
    );
    dbDelta( $query_string ); 
}
找到了答案here.