// 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...
}
Phải thừa nhận rằng nó giống Pythonic hơn thành ngữ PHP, nhưng mặt khác, bạn không phải lo lắng về việc xử lý một lượng lớn dữ liệu bổ sung.
Chỉnh sửa
Vì vậy, câu trả lời này đã được đánh dấu ít nhất hai lần tính đến thời điểm tôi viết thư này. Giả sử rằng tôi đã mắc phải một số lỗi lớn, tôi đã tiếp tục và chạy một số điểm chuẩn và đây là những gì tôi nhận thấy rằng giải pháp của tôi nhanh hơn 10% so với giải pháp thay thế gần nhất khi bảng không tồn tại và nhanh hơn 25% khi bảng tồn tại:
:::::::::::::::::::::::::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
Tôi đã thử chạy điều này với DESC, nhưng tôi đã hết thời gian chờ sau 276 giây (24 giây cho câu trả lời của tôi, 276 không hoàn thành mô tả của một bảng không tồn tại).
Để có biện pháp tốt, tôi đang đo điểm chuẩn so với một lược đồ chỉ có bốn bảng trong đó và đây là bản cài đặt MySQL gần như mới (đây là cơ sở dữ liệu duy nhất cho đến nay). Để xem kết xuất, hãy xem tại đây .
VÀ HƠN THẾ NỮA
Giải pháp cụ thể này cũng độc lập với cơ sở dữ liệu hơn vì cùng một truy vấn sẽ hoạt động trong PgSQL và Oracle.
CUỐI CÙNG
mysql_query()
trả về FALSE cho các lỗi không phải là "bảng này không tồn tại".
Nếu bạn cần đảm bảo rằng bảng không tồn tại, sử dụng mysql_errno()
để lấy mã lỗi và so sánh nó với Lỗi MySQL
.