プラグインを介して2つのデータベーステーブルを作成します
-
16-10-2019 - |
質問
私は自分のサイトの投票プラグインに取り組んでいます。2つのテーブルを作成したいのです。
Codexでは、IFステートメントを使用して、プラグインのインストール時にテーブルが既に作成されているかどうかを確認することをお勧めしますが、2つのテーブルを作成している場合、コードを変更するにはどうすればよいですか?
これは、プラグインインストール機能の私のIFステートメントであり、現在1テーブルが既に存在するかどうかを確認するように設定されています。
...
$table_name1 = $wpdb->prefix . "voters_ip";
$table_name2 = $wpdb->prefix . "vote_posts";
$installed_ver = get_option( "postvote_version" );
if($wpdb->get_var("show tables like '$table_name'") != $table_name1) { //unsure how to add both tables
$sql = "CREATE TABLE " . $table_name1 . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
vote_post_id bigint(20) NOT NULL,
voter_ip varchar(100) NOT NULL,
UNIQUE KEY id (id)
);";
$sql = "CREATE TABLE " . $table_name2 . " (
id bigint(20) NOT NULL AUTO_INCREMENT,
vote_post_id bigint(20) NOT NULL,
up int(11) NOT NULL,
ddown int(11) NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option("postvote_version", $postvote_version);
}
....
両方のテーブルが存在するかどうかを確認する正しい方法は何ですか?
解決
プラグインを構築する前に学習すべき基本的なプログラミング手法:
- &&(and)と||でチェックを連結できます(また)。
- あなたはそれぞれを守ることができます(そしてすべきです)
CREATE
独自のチェックでクエリ
SQL Syntax自分でクエリを書く前に調べる必要があります。
関連するメモでは、プラグインがあるときにこれらのテーブルを削除することを確認してください アンインストール/削除.
PS:意図したものはありませんが、それ します コードが何をするかわからずに貼り付けられたコピーのように見えます。プラグインでこれを行うことで、他の人のインスタレーションを危険にさらすことに注意してください!
他のヒント
私はあなたのコードを大いに一目見ましたが、少なくとも3つの問題です。
1つ目はセキュリティ関連です:
CREATE TABLE " . $table_name1 . "
あなたはあなたの機能がどのようなものを受け取るかわからないので、そうする方が良いでしょう:
CREATE TABLE `" . str_replace('`', '', $table_name1) . "`
2番目はSQL関連であり、すでに強調表示されています。
CREATE TABLE
あるべきです:
CREATE TABLE IF NOT EXISTS
最後で最も重要なのは、PHP構文関連です。 2番目の呼び出し:
$sql =
あるべきです:
$sql .=
そうでなければ、最初のテーブルを作成することはありません。これまで。
最後に、前のメッセージで指摘したように、プラグインまたはそのテーブルのバージョンをオプションに保存することをお勧めします。これにより、独自のオプションとスキーマが変更された場合、より簡単にアップグレードできます。
一意のテーブル名を使用している場合、表1が存在する場合、表2が存在するとかなりの自信を持って想定できます。したがって、1の存在のみをチェックし、そこにある場合はスクリプトをスキップします...そうでない場合は、スクリプトを実行します。
プラグイン用に設定したオプションをキーオフすることもできます。
- オプションが存在する場合(つまり、
get_option('my-voting-version')
)その後、プラグインがインストールされ、データベーススクリプトを実行する必要はありません。 - オプションがない場合は、スクリプトを実行してオプションを設定して、2回実行しないようにします。
プラグインが削除されていても、オプションはそのままで、再アクティブ化されたときにテーブルを書き直すことはありません。データベースバージョンを保存し、それに基づいてスクリプトを実行すると、アップグレードを管理する力が得られます。その後、サイトに以前に存在していたテーブルバージョンに基づいて、アップグレードスクリプトを選択的に実行できます。