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

14

我想知道如何在使用PDO时,在不需要先连接到数据库的情况下(即dsn中没有dbname),通过PHP获取MySQL数据库列表。

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


2
你可以像@nick rulez提到的那样使用show databases; 但是,你仍然需要至少登录到数据库服务器并创建连接。 - Eli
4个回答

16

感谢nick rulez。 我制作了一个数据库列表的示例:

$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>';
}

12

你可以使用

show databases

或者一个关于 information_schema 的查询:

select schema_name from information_schema.schemata

1
是的,我知道那个查询语句,但我的dsn会是什么?我想从PHP内部执行。 - taabouzeid
1
@ta,连接到MySQL时,实际上不需要指定要连接的数据库。其他一些数据库引擎则没有这么宽容。连接后,您可以发出“USE”命令来切换到所选的数据库。此外@nick,对于information_schema给予肯定。 - Charles

2
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>";
}

旧的回答,但是应该是“echo $h[0]”吗? - Steve

0

另一种类似于Falcon的方法:

这个脚本使用foreach而不是while,使用print而不是echo来显示数据库名称,并将断点设置为与XML一起使用的方式。它还使用了关联属性,即列名,而不是返回行中列的数组索引来显示所需的结果。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接