如何使用PDO获取PHP中的MySQL数据库列表?

如何使用PDO获取PHP中的MySQL数据库列表?

问题描述:

我想知道如何在PHP中使用PDO获取MySQL数据库列表,而无需先连接到数据库(我的意思是dsn中没有dbname)?如何使用PDO获取PHP中的MySQL数据库列表?

通常我使用函数mysql_list_dbs(),但我不再使用这种方式的mysql。

+2

你可以用'显示databases'喜欢提到@nick rulez;但是您仍然需要至少登录到数据库服务器并创建连接。 – Eli 2011-04-23 19:01:05

您可以使用

show databases 

或在INFORMATION_SCHEMA查询:

select schema_name from information_schema.schemata 
+1

是的,我知道那个查询,但是我的dsn会是什么?我想从PHP – taabouzeid 2011-04-23 19:11:38

+2

内部做到,恐怕Eli已经回答了你。 – 2011-04-23 19:19:12

+1

@ta,你实际上不需要*指定建立到MySQL的连接时要连接的数据库。其他一些数据库引擎不够宽容。连接后,您可以发出'USE'命令切换到您选择的数据库。另外@nick,'information_schema'为+1 – Charles 2011-04-24 02:21:03

在PHP版本5.4.0,您可以使用mysql_list_dbs()命令:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
$db_list = mysql_list_dbs($link); 
while ($row = mysql_fetch_object($db_list)) 
{ 
    echo $row->Database . "\n"; 
} 
+0

这是2015年,不要使用mysql_ *函数 – 2015-04-20 10:27:08

感谢尼克rulez 。 我做的DB上市的例子:

$user = 'root'; 
$pass = 'root'; 
$server = 'localhost'; 

$dbh = new PDO("mysql:host=$server", $user, $pass); 
$dbs = $dbh->query('SHOW DATABASES'); 

while(($db = $dbs->fetchColumn(0)) !== false) 
{ 
    echo $db.'<br>'; 
} 

另一种方法类似于猎鹰的:

此脚本使用的foreach,而不是同时和打印,而不是回音的分贝名称和休息标签被设置为它将用于XML。它还使用关联属性(列名称)而不是返回行中列的数组索引来显示所需的结果。

这假定您已正确设置了PDO连接,并且= $ dbconn。在示例中,多次使用$ db而不是$ dbconn。

$stmt ="SHOW DATABASES"; 
foreach($dbconn->query($stmt) as $row){ 
print $row['Database'];echo"<br />"; 
} 

try{ 
    $DBH = new PDO("mysql:host=localhost", "root", ""); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
}catch(PDOException $e) { 
    echo "Fail"; 
} 

$rs = $dbo->query("SHOW DATABASES"); 
while ($h = $rs->fetch(PDO::FETCH_NUM)) { 
    echo $r[0]."<br>"; 
}