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?

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


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)


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
}

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
}

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.