web-dev-qa-db-fra.com

dbDelta avec le personnage;

Pour gérer la mise à jour du plugin de base de données, j'ai changé mon code en utilisant dbDelta.

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

nouveau code

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

Mon problème est d'utiliser dbDelta dérange les insertions contenant le caractère ";". C'est parce que dans dbDelta, il y a ";" comme délimiteur.

Comment puis-je réparer cela ?

1
J.BizMai

Cela se produit pour cette raison:

La fonction dbDelta peut recevoir comme premier paramètre ($queries) un tableau ou une chaîne. Si $queries est une chaîne, dbDelta fera un tableau avec ";" comme délimiteur.

à l'intérieur de dbDelta

if ( !is_array($queries) ) {
    $queries = explode( ';', $queries );
    $queries = array_filter( $queries );
}

La solution consiste donc à créer un tableau de requêtes au lieu d'une chaîne comme premier paramètre comme celui-ci:

myFunction(){
    ...
    $query_string = array(
        0 => "INSERT INTO {$table_name} {$str_column_names} VALUES {$str_values}"
    );
    dbDelta( $query_string ); 
}

La réponse a été trouvée ici .

0
J.BizMai