// 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...
}
É certo que é mais Pythonic do que o idioma PHP, mas por outro lado, você não precisa se preocupar em lidar com uma grande quantidade de dados extras.
Editar
Portanto, esta resposta foi marcada pelo menos duas vezes no momento em que estou escrevendo esta mensagem. Supondo que eu tivesse cometido algum erro gigantesco, fui e executei alguns benchmarks , e foi isso que descobri que minha solução é mais de 10% mais rápida que a alternativa mais próxima quando a tabela não existe, e mais de 25% mais rápida quando a tabela existe:
:::::::::::::::::::::::::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
Tentei executar isso no DESC, mas tive um tempo limite após 276 segundos (24 segundos para minha resposta, 276 para não completar a descrição de uma tabela não existente).
Para uma boa medida, estou comparando com um esquema com apenas quatro tabelas e esta é uma instalação do MySQL quase nova (este é o único banco de dados até agora). Para ver a exportação, veja aqui .
E ALÉM DISSO
Essa solução em particular também é mais independente do banco de dados, pois a mesma consulta funcionará em PgSQL e Oracle.
FINALMENTE
mysql_query()
retorna FALSE para erros que não sejam "esta tabela não existe". Se você precisa garantir que a tabela não existe, use
mysql_errno()
para obter o código de erro e compará-lo com o Erros MySQL
.