Überprüfen, ob eine Datenbanktabelle vorhanden ist

9

Ich habe den WordPress-Codex und den professionellen WordPress gelesen. Es scheint, dass beide so etwas verwenden

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

um festzustellen, ob die Tabelle existiert. Gibt es einen Grund, warum CREATE TABLE IF NOT EXISTS ( ... )nicht verwendet wird? Es wird die Tabelle in 1 Abfrage überprüfen und erstellen, ist es nicht besser? Oder fehlt mir etwas?

JM bei der Arbeit
quelle

Antworten:

10

Wenn Sie "IF NOT EXISTS" verwenden, aktualisiert das dbdelta-Skript Ihre Datenbank nicht mit Deltas, die nach der ersten Erstellung der Datenbank angezeigt wurden.

(vorausgesetzt, Sie möchten dasselbe SQL-Skript wiederverwenden)

Zumindest ... das denke ich

Edelwasser
quelle
5

HAFTUNGSAUSSCHLUSS: Ich bin kein WordPress-Guru, sondern nur ein MySQL-DBA

Wenn Sie eine andere Abfrage verwenden möchten, versuchen Sie dies

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

Es wird entweder 0 (wenn keine Tabelle vorhanden ist) oder 1 (wenn eine Tabelle vorhanden ist) zurückgegeben.

RolandoMySQLDBA
quelle
3

Probier diese:

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
quelle
1
Bitte bearbeiten Sie Ihre Antwort und fügen Sie eine Erklärung hinzu: Warum könnte das das Problem lösen?
Fuxia
1

Ich bin mir nicht sicher, wie oder warum das funktioniert, aber ich kann:

if (in_array('snippets', $wpdb->tables)) {
  // do something if wp_snippets exists
}
iSWORD
quelle
2
Dies funktioniert nur für
Kerntabellen,
Es hat bei mir funktioniert, um die Tabelle des Code Snippets-Plugins zu erkennen.
iSWORD
0

Verwenden Sie die get_varFunktion aus der wpdbKlasse mit einer Ausnahmebehandlung:

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

Referenz: Wählen Sie eine Variable aus

Marcos Rezende
quelle