私はワードプレスコーデックスとプロのワードプレスを読みました。どちらも次のように使用しているようです
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
テーブルが存在するかどうかを確認します。 CREATE TABLE IF NOT EXISTS ( ... )
が使われない理由はありますか? 1回のクエリでテーブルをチェックして作成しますが、それより良くないでしょうか。それとも私は何かが足りないのですか?
"IF NOT EXISTS"を使用した場合、dbdeltaスクリプトはデータベースの初期作成後に表示されたデルタでデータベースをアップグレードしません。
(同じSQLスクリプトを再利用したいとします)
少なくとも...それが私が思うことです
免責事項:私はWordPressの達人ではなく、MySQL DBAだけです
別のクエリを使用したい場合は、これを試してください。
SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='dbname' AND table_name='tbname';
テーブルが存在しない場合は0、テーブルが存在する場合は1を返します。
このクエリを実行すると、常にデータベースエラーのログが作成されます。 tableが存在する場合はうまく機能しますが、存在しない場合は以下のデバッグログを生成します。
データベーステーブルが存在するかどうかを確認したり、デバッグログファイルをいっぱいにしてこれらのエラーを回避するための代替方法はありますか。
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
// do something
}
デバッグログ:
[09-Sep-2018 12:21:50 UTC] WordPress database error Table 'splivemain_db.wp_survey_popup_form' doesn't exist for query DESCRIBE wp_survey_popup_form; made by do_action('omxl-logger_page_omxl-cf7'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, myplugin__Logger->display, myplugin__Logger->get_columns
[09-Sep-2018 12:21:50 UTC] WordPress database error Table 'splivemain_db.wp_survey_popup_form' doesn't exist for query DESCRIBE wp_survey_popup_form; made by do_action('omxl-logger_page_omxl-cf7'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, myplugin__Logger->display, myplugin__Logger->get, myplugin__Logger->get_columns
[09-Sep-2018 12:21:50 UTC] WordPress database error Table 'splivemain_db.wp_survey_popup_form' doesn't exist for query SELECT* FROM wp_survey_popup_form WHERE 1=1 ORDER BY activity_date DESC LIMIT 0, 10 made by do_action('omxl-logger_page_omxl-cf7'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, myplugin__Logger->display, myplugin__Logger->get
これを試してください。
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
}
これがどのようにまたはなぜ機能するのかわからないが、私はできる:
if (in_array('snippets', $wpdb->tables)) {
// do something if wp_snippets exists
}