Vérification de l'existence d'une table de base de données

11

J'ai lu 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 il CREATE TABLE IF NOT EXISTS ( ... )n'est pas utilisé? Il vérifiera et créera la table en 1 requête, ne sera-ce pas mieux? Ou est-ce que je manque quelque chose?

JM au travail
la source

Réponses:

10

Si vous utilisez "IF NOT EXISTS", le script dbdelta ne mettra pas à niveau votre base de données avec des 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

edelwater
la source
5

AVERTISSEMENT: je ne suis pas un gourou de WordPress, seulement un DBA MySQL

Si vous souhaitez utiliser une autre requête, 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)

RolandoMySQLDBA
la source
3

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
}
Raximjon Komiljonov
la source
1
Veuillez modifier votre réponse et ajouter une explication: pourquoi cela pourrait-il résoudre le problème?
fuxia
1

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

if (in_array('snippets', $wpdb->tables)) {
  // do something if wp_snippets exists
}
iSWORD
la source
2
cela ne fonctionne que pour les tables de base comme je le trouve lors des tests
Manchumahara
cela a fonctionné pour moi pour détecter la table du plugin Code Snippets.
iSWORD
0

Utilisez la get_varfonction de la wpdbclasse avec une gestion des exceptions:

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();
}

Référence: SELECT une variable

Marcos Rezende
la source