获取模式列表mysqli


Get schema list 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;
}

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

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

您应该做的是:

//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);