Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich mit PHP prüfen, ob eine MySQL-Tabelle existiert?

// Select 1 from table_name will return false if the table does not exist.
$val = mysql_query('select 1 from `table_name` LIMIT 1');

if($val !== FALSE)
{
   //DO SOMETHING! IT EXISTS!
}
else
{
    //I can't find it...
}

Zugegeben, es ist pythonischer als das PHP-Idiom, aber andererseits müssen Sie sich keine Gedanken über den Umgang mit einer Unmenge zusätzlicher Daten machen.

Bearbeiten

Diese Antwort wurde also zum Zeitpunkt des Schreibens dieser Nachricht mindestens zweimal markiert. In der Annahme, dass ich einen gigantischen Fehler gemacht hatte, ging ich los und ließ einige Benchmarks laufen , und ich habe festgestellt, dass meine Lösung über 10 % schneller ist als die nächste Alternative, wenn die Tabelle nicht vorhanden ist, und über 25 % schneller, wenn die Tabelle vorhanden ist:

:::::::::::::::::::::::::BEGINNING NON-EXISTING TABLE::::::::::::::::::::::::::::::
23.35501408577 for bad select
25.408507823944 for select from schema num rows -- calls mysql_num_rows on select... from information_schema.
25.336688995361 for select from schema fetch row -- calls mysql_fetch_row on select... from information_schema result
50.669058799744 for SHOW TABLES FROM test
:::::::::::::::::::::::::BEGINNING EXISTING TABLE::::::::::::::::::::::::::::::
15.293519973755 for good select
20.784908056259 for select from schema num rows
21.038464069366 for select from schema fetch row
50.400309085846 for SHOW TABLES FROM test

Ich habe versucht, dies gegen DESC auszuführen, aber ich hatte eine Zeitüberschreitung nach 276 Sekunden (24 Sekunden für meine Antwort, 276, um die Beschreibung einer nicht vorhandenen Tabelle nicht zu vervollständigen).

Zu guter Letzt vergleiche ich ein Schema mit nur vier Tabellen darin, und dies ist eine fast neue MySQL-Installation (dies ist bisher die einzige Datenbank). Um den Export zu sehen, schauen Sie hier nach .

UND MEHR

Diese spezielle Lösung ist auch datenbankunabhängiger, da dieselbe Abfrage in PgSQL und Oracle funktioniert.

ENDLICH

mysql_query() gibt FALSE für Fehler zurück, die nicht "diese Tabelle existiert nicht" lauten.

Wenn Sie garantieren müssen, dass die Tabelle nicht existieren, verwenden Sie mysql_errno() um den Fehlercode zu erhalten und ihn mit dem entsprechenden MySQL-Fehler .