Ü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?

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


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.


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
}

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
}

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.