sql >> Database >  >> RDS >> Mysql

Hoe kan ik controleren of er een MySQL-tabel bestaat met 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...
}

Toegegeven, het is meer Pythonisch dan van het PHP-idioom, maar aan de andere kant hoef je je geen zorgen te maken over het omgaan met een grote hoeveelheid extra data.

Bewerken

Dit antwoord is dus minstens twee keer genoteerd vanaf het moment dat ik dit bericht schrijf. Ervan uitgaande dat ik een gigantische fout had gemaakt, ging ik en voerde ik een aantal benchmarks uit , en dit is wat ik ontdekte dat mijn oplossing meer dan 10% sneller is dan het dichtstbijzijnde alternatief als de tabel niet bestaat, en meer dan 25% sneller als de tabel wel bestaat:

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

Ik heb geprobeerd dit uit te voeren tegen DESC, maar ik had een time-out na 276 seconden (24 seconden voor mijn antwoord, 276 om de beschrijving van een niet-bestaande tabel te voltooien).

Voor de goede orde vergelijk ik met een schema met slechts vier tabellen erin en dit is een bijna nieuwe MySQL-installatie (dit is de enige database tot nu toe). Om de export te zien, kijk hier .

EN VERDER VERDER

Deze specifieke oplossing is ook meer database-onafhankelijk omdat dezelfde query ook werkt in PgSQL en Oracle.

EINDELIJK

mysql_query() geeft FALSE terug voor fouten die niet "deze tabel bestaat niet".

Als u moet garanderen dat de tafel niet bestaan, gebruik mysql_errno() om de foutcode te krijgen en deze te vergelijken met de relevante MySQL-fouten .



  1. Hoe sla ik een BIGINT op in MySQL met PDO?

  2. cron job om oude gegevens uit postgres op debian te verwijderen

  3. SQLite UNION-operator

  4. Hoe de statusbalkkleur in SSMS in te stellen voor verschillende SQL Server-instanties - SQL Server / TSQL-zelfstudie, deel 6