2009-09-20 45 views

Trả lời

19

gì về việc sử dụng một truy vấn SQL mà không một cái gì đó như thế này:

show tables 

Hoặc, nếu cần thiết, xác định cơ sở dữ liệu:

show tables from crawler 

Và, nếu bạn chỉ muốn có được một số bảng:

show tables from crawler like 'site%' 


Thực ra, ngay cả khiChức năngtồn tại, trạng thái trang thủ công:

Chức năng này không còn được dùng nữa. Đó là thích hợp hơn để sử dụng mysql_query() đến phát hành câu hỏi SQL SHOW TABLES [FROM db_name] [LIKE 'pattern'] thay thế.

Vì vậy, điều này hoàn toàn ổn với PDO, tôi đoán vậy.


Và, thử nghiệm với PDO:

$db = new PDO('mysql:dbname=crawler;host=127.0.0.1', 'crawler', 'crawler'); 
$result = $db->query("show tables"); 
while ($row = $result->fetch(PDO::FETCH_NUM)) { 
    var_dump($row[0]); 
} 

Tôi nhận được loại đầu ra:

string 'headers' (length=7) 
string 'headers_sites' (length=13) 
string 'headers_sites_0' (length=15) 
... 
string 'headers_sites_7' (length=15) 
string 'reporting_sites_servers_software' (length=32) 
string 'servers' (length=7) 
string 'sites' (length=5) 
string 'sites_0' (length=7) 
... 
string 'sites_servers' (length=13) 
string 'sites_software' (length=14) 
string 'software' (length=8) 

nào phù hợp với các bảng Tôi thực sự có trong cơ sở dữ liệu này.

+0

Có. Điều này sẽ làm việc miễn là cú pháp truy vấn "hiển thị bảng" hợp lệ cho tất cả các trình điều khiển cơ sở dữ liệu được hỗ trợ PDO. Đây có phải là trường hợp không? – saintsjd

+0

Ví dụ: Postgres sử dụng "\ dt" để liệt kê các bảng chứ không phải "Hiển thị bảng". Vì vậy, nếu mục tiêu của chúng tôi là khả năng tương thích qua cơ sở dữ liệu (sử dụng PDO), thì cách này sẽ không hoạt động. – saintsjd

+0

@saintsjd: có lẽ không, không may :-(;; đi qua các nguồn của khung công tác ORM của Doctrine, truy vấn được sử dụng để liệt kê các bảng của một DB phức tạp hơn một chút đối với MsSQL, phức tạp hơn một lần nữa cho SQLite, và thậm chí nhiều hơn nữa phức tạp cho PgSQL :-( –

2

Nếu bạn muốn có một cách cầm tay để truy vấn cho các lược đồ, bạn có thể sử dụng ansi tiêu chuẩn INFORMATION_SCHEMA

0
$alltables=$db->query("SHOW TABLES",PDO::FETCH_NUM); 

while($result=$alltables->fetch()){ 

echo $result[0].'<br/>'; 
} 

Đây là mã chính xác mà bạn muốn, tôi đoán vậy.

Các vấn đề liên quan