web-dev-qa-db-fra.com

Vérifier si la table de base de données existe

Je lis le codex wordpress et wordpress professionnel. Il semble que les deux utilisent quelque chose comme

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

pour déterminer si la table existe. Y a-t-il une raison pour laquelle CREATE TABLE IF NOT EXISTS ( ... ) n'est pas utilisé? Il va vérifier et créer la table en 1 requête, ça ne va pas être mieux? Ou est-ce que je manque quelque chose?

8
JM at Work

Si vous utilisez "IF NOT EXISTS", le script dbdelta ne mettra pas à niveau votre base de données avec les attributs delta apparus après la création initiale de la base de données.

(en supposant que vous souhaitiez réutiliser le même script SQL)

au moins ... c'est ce que je pense

9
edelwater

AVERTISSEMENT: Je ne suis pas un gourou WordPress, seulement un administrateur de base de données MySQL

Si vous souhaitez utiliser une requête différente, essayez ceci

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

Il retournera soit 0 (si la table n'existe pas) ou 1 (si la table existe)

4
RolandoMySQLDBA

Cette requête lors de l'exécution crée toujours des journaux pour les erreurs de base de données. Cela fonctionne bien quand la table existe, mais quand elle ne le fait pas, elle génère les journaux de débogage indiqués ci-dessous.

Un autre moyen de vérifier si la table de base de données existe ou d'éviter que ces erreurs ne remplissent le fichier de journaux de débogage?

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

Journaux de débogage:

[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
0
OmAk

Essaye celui-là:

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
}
0

Je ne sais pas comment ni pourquoi cela fonctionne, mais je peux le faire:

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