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 ?
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 .