获取架构列表mysqli

时间:2013-11-20 20:55:15

标签: php mysql database mysqli

据我所知,有几种方法可以将MySQL中的数据库名称列表添加到php中的数组中:

//connect to database
$link = mysqli_connect(HOST, USERNAME, PASSWORD);
mysqli_select_db($link, DB_PRESENTATION_LAYER);

//1
$query = "SHOW DATABASES";
$databases = mysqli_query($link, $query);
$databases = mysqli_fetch_row($databases);

//2
$query = "SELECT `SCHEMA_NAME` FROM 'information_schema.SCHEMATA'";
$databases = mysqli_query($link, $query);
$databases = mysqli_fetch_row($databases);

//3 ( DEPRECATED as of PHP 5.4.0 )
$databases = mysql_list_dbs($link);

var_dump($databases);

当我做以上任何一件事时,我得到的是:

array (size=1)
  0 => string 'information_schema' (length=18)

这是为什么? 另外,为什么php没有更新mysql_list_dbs()函数来使用mysqli?

结论

对于其他试图获取数据库列表的人来说,这是我的功能(希望我可以从这个问题中挽救一些有用的东西)。

将'database'替换为您想要返回的数据库的前缀,或者将其删除以获取所有数据库。

public function get_database_list() {

    $databases = array();

    $query = "SELECT `schema_name` FROM information_schema.schemata WHERE schema_name LIKE 'database%'";
    $result = mysqli_query($this -> link1, $query);
    while($row = mysqli_fetch_array($result)) {
        array_push($databases, $row['schema_name']);
    }

    return $databases;

}

2 个答案:

答案 0 :(得分:2)

您只获取第一行结果,通常第一个数据库正好是information schema。要列出所有这些,请尝试以下方法:

$list = array();
while($row = mysqli_fetch_row($databases)) {
    $list[] = $row;
}
print_r($list);

答案 1 :(得分:2)

你应该做的是:

//connect to database
$link = mysqli_connect(HOST, USERNAME, PASSWORD);
mysqli_select_db($link, DB_PRESENTATION_LAYER);

//1
$query = "SHOW DATABASES";
$databases = mysqli_query($link, $query);
$arr = array();
while (($database = mysqli_fetch_row($databases))!=null)
{
    $arr[] = $database;
}
var_dump($databases);
相关问题