web-dev-qa-db-ja.com

外部キーを使用するdbDeltaが更新で機能しない

プラグイン(register_activation_hook())をアクティブにするときに、dbDeltaでFOREIGN KEYを使用しています。初めてテーブルを作成するときはうまくいきますが、テーブルの更新時にエラーが出力されます(テーブルはすでに存在していますが、テーブルで変更を行う必要があります)。助言がありますか?

    if(GLOBAL_PLUGIN_VERION != get_option("GLOBAL_PLUGIN_VERSION")){
      $sql = "CREATE TABLE `".TEST_TABLE."` (
     `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
     `title` VARCHAR( 100 ) NOT NULL,
     `description` TEXT DEFAULT NULL,
     `location_id` INT( 11 ) NOT NULL,
     PRIMARY KEY  (`id`),
     FOREIGN KEY  (`location_id`) REFERENCES `".TEST2_TABLE."` (`id`)
    );";
   }

エラー:

PHP通知:未定義のオフセット:1568行目のwp-admin/upgrade.phpに1

WordPressデータベースエラーSQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルで、 'FOREIGN KEY(location_id)リファレンスtest2id) '1行目のクエリALTER TABLE test ADD COLUMN FOREIGN KEY(location_id)リファレンスtest2id)作成者...

WordPressデータベースエラークエリに対して定義された複数の主キーALTER TABLE TEST ADD PRIMARY KEY(id)作成者...

1
CodePorter

Codex から:

ただし、dbDelta関数はかなりうるさいことに注意してください。例えば: [...]

  • フィールド名の前後にアポストロフィやバッククォートを使用しないでください。
$sql = "CREATE TABLE ".TEST_TABLE." (
    id INT( 11 ) NOT NULL AUTO_INCREMENT,
    title VARCHAR( 100 ) NOT NULL,
    description TEXT DEFAULT NULL,
    location_id INT( 11 ) NOT NULL,
    PRIMARY KEY  (id),
    FOREIGN KEY  (location_id) REFERENCES ".TEST2_TABLE." (id)
);";
1
Pat J