sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag kontrollera om en MySQL-tabell finns med 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...
}

Visserligen är det mer pytoniskt än PHP-idiomet, men å andra sidan behöver du inte oroa dig för att hantera en stor mängd extra data.

Redigera

Så det här svaret har markerats minst två gånger när jag skriver det här meddelandet. Förutsatt att jag hade gjort ett gigantiskt fel, gick jag och körde några benchmarks , och det här är vad jag fann att min lösning är över 10 % snabbare än det närmaste alternativet när tabellen inte finns, och den över 25 % snabbare när tabellen finns:

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

Jag försökte köra detta mot DESC, men jag fick en timeout efter 276 sekunder (24 sekunder för mitt svar, 276 för att misslyckas med att slutföra beskrivningen av en icke existerande tabell).

För gott skull benchmarkar jag mot ett schema med bara fyra tabeller i och detta är en nästan ny MySQL-installation (detta är den enda databasen hittills). För att se exporten, titta här .

OCH VIDARE

Denna speciella lösning är också mer databasoberoende eftersom samma fråga kommer att fungera i PgSQL och Oracle.

ÄNTLIGEN

mysql_query() returnerar FALSE för fel som inte är "den här tabellen finns inte".

Om du behöver garantera att tabellen inte gör det existerar, använd mysql_errno() för att få felkoden och jämföra den med relevant MySQL-fel .



  1. Postgres - Transponera rader till kolumner

  2. Orsaker till MySQL-fel 2014 Kan inte köra frågor medan andra obuffrade frågor är aktiva

  3. Bästa sättet att denormalisera data i Django?

  4. Generera en uppsättning eller sekvens utan loopar – del 2