2

プラグインの DB にいくつかの変更があったため、テーブルを変更していくつかの列を追加する必要がありますが、関数が実行されていても、テーブルは変更されません。これが私が書いた関数です

    $sql = "ALTER TABLE `wp_tnt_videos` ADD `date_created` INT NOT NULL DEFAULT '0' AFTER `video_order`, ADD `date_modified` INT NOT NULL DEFAULT '0' AFTER  `date_created`, ADD `user_id` INT NOT NULL DEFAULT '0' AFTER `date_modified`;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);

私はこれを読みました:http://hungred.com/how-to/wordpress-dbdelta-function/ そして、SQLコマンドを注意深くチェックしようとしました。また、mysqlでそのsqlコマンドを実行すると、機能します!! だから、私を助けてください!:|

4

2 に答える 2

4

あなたの答えはコーデックスにあります:

  • SQL ステートメントでは、各フィールドを個別の行に配置する必要があります。
  • PRIMARY KEY という単語と主キーの定義の間には 2 つのスペースが必要です。
  • 同義語の INDEX ではなく、キーワード KEY を使用する必要があり、少なくとも 1 つの KEY を含める必要があります。
  • フィールド名の前後にアポストロフィやバッククォートを使用しないでください。

http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function

1 つには、フィールド名の前後にバッククォートがあります。そのルールはおそらくテーブル名にも適用されますが、よくわかりません。

さらに、dbDeltaデータベースに直接クエリを実行しているかのように使用しようとしています。そのようには機能しません。CREATE TABLE毎回新しいものを作成しているかのように使用して、完全な目的のテーブル構造を与える必要があります...

dbDelta 関数は現在のテーブル構造を調べ、目的のテーブル構造と比較し、必要に応じてテーブルを追加または変更するため、更新に非常に便利です (その他の例については wp-admin/upgrade-schema.php を参照してください)。 dbDelta の使用方法)。

http://codex.wordpress.org/Creating_Tables_with_Plugins#Adding_an_Upgrade_Function

ALTER TABLEコマンドを与えたり、変更したい部分だけを与えたりする必要はありません。その意味では、汎用のデータベース変更ツールではありません。そして、すでに述べたように、それは非常にうるさいです。改行を含めて、例とまったく同じように SQL をフォーマットします。

この機能を注意深く監視する必要があることを付け加えておきます。それは静かに失敗し、インデックスの削除など、特定のことを何をすべきかないようです-少なくとも私はそれで多くの問題を抱えていました。列を移動して新しい列を挿入するのか、単に最後に追加するのかはわかりません。

于 2013-01-27T16:49:53.350 に答える