sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo verificar si existe una tabla MySQL con PHP?

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

Es cierto que es más Pythonic que PHP, pero por otro lado, no tienes que preocuparte por lidiar con una gran cantidad de datos adicionales.

Editar

Entonces, esta respuesta ha sido marcada al menos dos veces desde el momento en que escribo este mensaje. Asumiendo que había cometido algún error gigantesco, fui y ejecuté algunos benchmarks , y esto es lo que encontré:mi solución es un 10 % más rápida que la alternativa más cercana cuando la tabla no existe, y un 25 % más rápida cuando la tabla 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

Intenté ejecutar esto contra DESC, pero tuve un tiempo de espera después de 276 segundos (24 segundos para mi respuesta, 276 para no completar la descripción de una tabla no existente).

En buena medida, estoy comparando con un esquema con solo cuatro tablas y esta es una instalación de MySQL casi nueva (esta es la única base de datos hasta ahora). Para ver la exportación, mira aquí .

Y ADEMÁS

Esta solución en particular también es más independiente de la base de datos, ya que la misma consulta funcionará en PgSQL y Oracle.

POR FIN

mysql_query() devuelve FALSO para errores que no son "esta tabla no existe".

Si necesita garantizar que la tabla no existe, use mysql_errno() para obtener el código de error y compararlo con el correspondiente Errores MySQL .