web-dev-qa-db-ja.com

文字を含むdbDelta。

データベースプラグインの更新を管理するために、dbDeltaを使用してコードを変更しました。

古いコード

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;
}

新しいコード

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

私の問題は、dbDeltaを使用すると、文字「;」を含む挿入が妨げられることです。これは、dbDeltaに「;」があるためです。区切り文字として。

どうすれば修正できますか?

1
J.BizMai

これはこの理由で起こります:

関数dbDeltaは、最初のパラメーター($queries)配列または文字列。 $queriesは文字列、dbDeltaは ";"で配列を作成します区切り文字として。

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 ); 
}

答えが見つかりました ここ

0
J.BizMai