// 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...
}
Разбира се, това е по-скоро Pythonic, отколкото идиома на PHP, но от друга страна, не е нужно да се притеснявате, че ще се справите с обилно количество допълнителни данни.
Редактиране
Така че този отговор е отбелязан поне два пъти от времето, когато пиша това съобщение. Предполагайки, че съм допуснал огромна грешка, отидох и пуснах някои бенчмаркове , и ето какво открих, че моето решение е с над 10% по-бързо от най-близката алтернатива, когато таблицата не съществува, и с над 25% по-бързо, когато таблицата съществува:
:::::::::::::::::::::::::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
Опитах да изпълня това срещу DESC, но имах изчакване след 276 секунди (24 секунди за моя отговор, 276, за да не завърша описанието на несъществуваща таблица).
За добра мярка правя сравнителен анализ със схема със само четири таблици в нея и това е почти нова инсталация на MySQL (това е единствената база данни досега). За да видите експортирането, вижте тук .
И ОВЕЧЕ
Това конкретно решение също е по-независимо от базата данни, тъй като една и съща заявка ще работи в PgSQL и Oracle.
НАКРАЯ
mysql_query()
връща FALSE за грешки, които не са "тази таблица не съществува".
Ако трябва да гарантирате, че масатане съществува, използвайте mysql_errno()
за да получите кода на грешката и да го сравните със съответния Грешки в MySQL
.