// 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 .