2009-09-20 12 views

Respuesta

19

¿Qué pasa con el uso de una consulta SQL que hace algo como esto:

show tables 

O, si es necesario, especificando la base de datos:

show tables from crawler 

Y, si sólo desea obtener algunas tablas:

show tables from crawler like 'site%' 


En realidad, incluso si el mysql_list_tables() existe la función, su página manual indica:

Esta función está en desuso. Es preferible utilizar mysql_query() a emitir un SQL SHOW TABLES [FROM db_name] [LIKE 'pattern'] declaración en su lugar.

Por lo tanto, esto debería estar bastante bien con PDO, supongo.


Y, probando con DOP:

$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]); 
} 

que estoy recibiendo este tipo de salida:

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) 

que encaja con las tablas de hecho tengo en esta base de datos.

+0

Sí. Esto funcionará siempre que la sintaxis de consulta "mostrar tablas" sea válida para todos los controladores de bases de datos compatibles con PDO. ¿Es este el caso? – saintsjd

+0

Por ejemplo, Postgres usa "\ dt" para listar tablas y no "Mostrar tablas". Entonces, si nuestro objetivo es la compatibilidad entre bases de datos (usando PDO), entonces de esta manera no funcionará. – saintsjd

+0

@saintsjd: probablemente no, desafortunadamente :-(;; pasando por las fuentes del marco Doctrine ORM, la consulta utilizada para listar las tablas de un DB es un poco más complicada para MsSQL, más complicada nuevamente para SQLite, y aún más complicado para PgSQL :-( –

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

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

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

Este es el código exacto que desea, supongo.