Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso verificare se esiste una tabella 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...
}

Certo, è più Pythonico che dell'idioma PHP, ma d'altra parte, non devi preoccuparti di gestire un'abbondante quantità di dati extra.

Modifica

Quindi, questa risposta è stata contrassegnata almeno due volte dal momento in cui scrivo questo messaggio. Supponendo di aver commesso un errore gigantesco, sono andato ed ho eseguito alcuni benchmark , e questo è ciò che ho scoperto che la mia soluzione è oltre il 10% più veloce dell'alternativa più vicina quando la tabella non esiste, ed è oltre il 25% più veloce quando la tabella esiste:

:::::::::::::::::::::::::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

Ho provato a eseguirlo contro DESC, ma ho avuto un timeout dopo 276 secondi (24 secondi per la mia risposta, 276 per non completare la descrizione di una tabella non esistente).

Per buona misura, sto confrontando uno schema con solo quattro tabelle e questa è un'installazione MySQL quasi fresca (questo è l'unico database finora). Per vedere l'esportazione, guarda qui .

E INOLTRE

Questa particolare soluzione è anche più indipendente dal database poiché la stessa query funzionerà in PgSQL e Oracle.

FINALMENTE

mysql_query() restituisce FALSE per errori che non sono "questa tabella non esiste".

Se devi garantire che la tabella non esiste, usa mysql_errno() per ottenere il codice di errore e confrontarlo con il Errori MySQL .