// 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...
}
Det er ganske vist mere pytonisk end PHP-formsproget, men på den anden side behøver du ikke bekymre dig om at håndtere en rigelig mængde ekstra data.
Rediger
Så dette svar er blevet markeret mindst to gange på det tidspunkt, jeg skriver denne besked. Forudsat at jeg havde lavet en gigantisk fejl, gik jeg og kørte nogle benchmarks , og det er hvad jeg fandt ud af, at min løsning er over 10 % hurtigere end det nærmeste alternativ, når tabellen ikke eksisterer, og den er over 25 % hurtigere, når tabellen eksisterer:
:::::::::::::::::::::::::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
Jeg prøvede at køre dette mod DESC, men jeg havde en timeout efter 276 sekunder (24 sekunder for mit svar, 276 for ikke at fuldføre beskrivelsen af en ikke eksisterende tabel).
For god ordens skyld benchmarker jeg mod et skema med kun fire tabeller i det, og dette er en næsten frisk MySQL-installation (dette er den eneste database indtil videre). For at se eksporten, se her .
OG YDERLIGERE
Denne særlige løsning er også mere databaseuafhængig, da den samme forespørgsel vil fungere i PgSQL og Oracle.
ENDELIG
mysql_query()
returnerer FALSE for fejl, der ikke er "denne tabel eksisterer ikke".
Hvis du skal garantere, at bordet ikke eksisterer, brug mysql_errno()
for at få fejlkoden og sammenligne den med den relevante MySQL-fejl
.