データベーステーブルが存在するかどうかの確認


11

私はワードプレスコーデックスとプロのワードプレスを読みました。どちらも次のようなものを使用しているようです

if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {

テーブルが存在するかどうかを確認します。CREATE TABLE IF NOT EXISTS ( ... )使用しない理由はありますか?1つのクエリでテーブルをチェックして作成します。それとも何か不足していますか?

回答:


10

「IF NOT EXISTS」を使用する場合、dbdeltaスクリプトはデータベースを最初に作成した後に表示されるデルタでデータベースをアップグレードしません。

(同じSQLスクリプトを再利用したい場合)

少なくとも...それは私が思うことです


5

免責事項:私はWordPressの第一人者ではなく、MySQL DBAだけです

別のクエリを使用する場合は、これを試してください

SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='dbname' AND table_name='tbname';

0(テーブルが存在しない場合)または1(テーブルが存在する場合)を返します。


3

これを試してください:

global $wpdb;
$table_name = $wpdb->base_prefix.'custom_prices';
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );

if ( ! $wpdb->get_var( $query ) == $table_name ) {
    // go go
}

1
回答を編集し、説明を追加してください:なぜそれで問題を解決できますか?
fuxia

1

これがどのようにまたはなぜ機能するのかわかりませんが、私は次のことができます:

if (in_array('snippets', $wpdb->tables)) {
  // do something if wp_snippets exists
}

2
これは、テスト中に見つけたコアテーブルでのみ機能します
Manchumahara

コードスニペットプラグインのテーブルを検出するために私のために働いた。
iSWORD

0

例外処理のあるクラスのget_var関数を使用しますwpdb

try {
    $wpdb->hide_errors();
    $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->prefix . 'translator' );
    $wpdb->show_errors();
} catch (Exception $e) {
    error_log($e);
} finally {
    translator_create_db();
}

リファレンス:変数を選択する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.