J'utilise la fonction d'installation suivante avec dbDelta comme référence au codex, articles sur SO J'ai surveillé les problèmes typiques liés à, par exemple. un espace au lieu de deux espacés à la clé primaire ...
function myplugin_install(){
global $wpdb;
$table_name = $wpdb->prefix . "vehicles";
$sql = "CREATE TABLE IF NOT EXISTS $table_name
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(25) NOT NULL,
PRIMARY KEY (id)
);
";
$sql .= "CREATE TABLE IF NOT EXISTS $table_name1
(
...
)";
$sql .= "CREATE TABLE IF NOT EXISTS $table_nameX
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
art_alarmierung VARCHAR(25) NOT NULL ,
PRIMARY KEY (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
echo $wpdb->last_error;
}
dbDelata ne stocke que la dernière variable $sql
. Et echo $wpdb->last_error;
ne montre aucune erreur? Où est mon échec?
BR; mybeck
Exécutez dbDelta
pour chaque instruction SQL séparément:
function myplugin_install(){
global $wpdb;
$table_name = $wpdb->prefix . "vehicles";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$sql = "CREATE TABLE IF NOT EXISTS $table_name
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(25) NOT NULL,
PRIMARY KEY (id)
);
";
dbDelta($sql);
$sql2 = "CREATE TABLE IF NOT EXISTS $table_name1
(
...
)";
dbDelta($sql2);
$sql3 = "CREATE TABLE IF NOT EXISTS $table_nameX
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
art_alarmierung VARCHAR(25) NOT NULL ,
PRIMARY KEY (id)
);";
dbDelta($sql3);
}
Pour ceux qui essaient de comprendre comment certains plugins, comme WooCommerce, peuvent le faire sans appeler dbDelta
pour chaque table, la raison en est la partie IF NOT EXISTS
de la requête. La fonction dbDelta
crée un index basé sur ce qui vient après CREATE TABLE
. Elle finit donc par deviner que toutes les requêtes créent la même table.
Si vous êtes arrivé ici, essayez d'utiliser simplement CREATE TABLE tablename
et cela fonctionnera :)