// 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...
}
確かに、これはPHPイディオムよりもPythonicですが、一方で、大量の余分なデータを処理することを心配する必要はありません。
編集
したがって、このメッセージを書いている時点で、この回答は少なくとも2回マークダウンされています。大きな間違いを犯したと仮定して、行ってベンチマーク を実行しました。 、これは、テーブルが存在しない場合、私のソリューションが最も近い代替案よりも10%以上高速であり、テーブルが存在する場合、25%以上高速であることがわかりました。
:::::::::::::::::::::::::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
これをDESCに対して実行しようとしましたが、276秒後にタイムアウトになりました(私の答えは24秒で、存在しないテーブルの説明を完了できませんでした)。
念のため、テーブルが4つしかないスキーマに対してベンチマークを行っています。これは、ほぼ新しいMySQLインストールです(これは、これまでのところ唯一のデータベースです)。エクスポートを確認するには、こちら をご覧ください。 。
さらに
この特定のソリューションは、同じクエリがPgSQLとOracleで機能するため、データベースに依存しません。
最後に
mysql_query()
「このテーブルは存在しません」ではないエラーに対してFALSEを返します。
テーブルがしないことを保証する必要がある場合 存在する場合は、mysql_errno()
を使用します エラーコードを取得し、関連するMySQLエラー
。