私はコーデックスを参照するようにdbDeltaで次のインストール関数を使用していますSOの記事PRIMARY KEYで2つのスペースではなく1つのスペース...
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は、最後の$sql
変数のみを格納します。そしてecho $wpdb->last_error;
はエラーを表示しませんか?私の失敗はどこにありますか?
BR; Mybecks
SQLステートメントごとにdbDelta
を別々に実行します。
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);
}
WooCommerceのようないくつかのプラグインがすべてのテーブルに対してdbDelta
を呼び出さなくてもそれを実行できる方法を理解しようとしている人にとって、その理由はqueryのIF NOT EXISTS
部分です。 dbDelta
関数は、CREATE TABLE
の後にくるものに基づいてインデックスを作成するので、すべてのクエリが同じテーブルを作成すると推測してしまいます。
ここに来たら、CREATE TABLE tablename
だけを使ってみてください。