// 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...
}
Je pravda, že je to více Pythonic než PHP idiom, ale na druhou stranu se nemusíte bát, že byste se zabývali velkým množstvím dat navíc.
Upravit
Takže tato odpověď byla od doby, kdy píšu tuto zprávu, označena nejméně dvakrát. Za předpokladu, že jsem udělal nějakou obrovskou chybu, šel jsem a provedl jsem několik benchmarků , a to je to, co jsem zjistil, že moje řešení je o více než 10 % rychlejší než nejbližší alternativa, když tabulka neexistuje, a o více než 25 % rychlejší, když tabulka existuje:
:::::::::::::::::::::::::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
Zkoušel jsem to spustit proti DESC, ale po 276 sekundách mi vypršel časový limit (24 sekund pro mou odpověď, 276 pro neúspěšné dokončení popisu neexistující tabulky).
Pro dobrou míru porovnávám schéma se schématem pouze se čtyřmi tabulkami a toto je téměř čerstvá instalace MySQL (toto je zatím jediná databáze). Chcete-li zobrazit export, podívejte se sem .
A DÁLE
Toto konkrétní řešení je také více nezávislé na databázi, protože stejný dotaz bude fungovat v PgSQL a Oracle.
KONEČNĚ
mysql_query()
vrací FALSE pro chyby, které nejsou "tato tabulka neexistuje".
Pokud potřebujete zaručit, že tabulka není existovat, použijte mysql_errno()
získat kód chyby a porovnat jej s relevantním Chyby MySQL
.