Al usar PHP PDO para acceder a la base de datos, ¿hay alguna manera de enumerar todas las tablas en una base de datos?¿Equivalente de mysql_list_tables en PHP PDO?
Algo así como mysql_list_tables() es lo que necesita.
Al usar PHP PDO para acceder a la base de datos, ¿hay alguna manera de enumerar todas las tablas en una base de datos?¿Equivalente de mysql_list_tables en PHP PDO?
Algo así como mysql_list_tables() es lo que necesita.
¿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 unSQL 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.
Si usted quiere hacer esto de una manera multiplataforma, mira en Zend Framework 's Zend_Db
, que proporciona la listTables()
método
Si desea una manera portátil para consultar el esquema, puede utilizar la norma ANSI estándar INFORMATION_SCHEMA
$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.
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
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
@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 :-( –