Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je vérifier si une table MySQL existe avec 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...
}

Certes, il s'agit plus de Python que de l'idiome PHP, mais d'un autre côté, vous n'avez pas à vous soucier de traiter une quantité abondante de données supplémentaires.

Modifier

Donc, cette réponse a été notée au moins deux fois au moment où j'écris ce message. En supposant que j'avais fait une erreur gargantuesque, je suis allé et j'ai couru quelques benchmarks , et c'est ce que j'ai trouvé que ma solution est plus de 10 % plus rapide que l'alternative la plus proche lorsque la table n'existe pas, et plus de 25 % plus rapide lorsque la table 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

J'ai essayé de l'exécuter contre DESC, mais j'ai eu un délai d'attente après 276 secondes (24 secondes pour ma réponse, 276 pour ne pas terminer la description d'une table non existante).

Pour faire bonne mesure, je compare un schéma avec seulement quatre tables et il s'agit d'une installation MySQL presque fraîche (c'est la seule base de données à ce jour). Pour voir l'exportation, regardez ici .

ET AUSSI

Cette solution particulière est également plus indépendante de la base de données car la même requête fonctionnera dans PgSQL et Oracle.

ENFIN

mysql_query() renvoie FALSE pour les erreurs qui ne sont pas "cette table n'existe pas".

Si vous devez garantir que la table ne le fait pas existent, utilisez mysql_errno() pour obtenir le code d'erreur et le comparer au Erreurs MySQL .