2013-11-20 76 views
-1

據我所知有正從MySQL數據庫名稱的列表到一個數組在PHP的幾個方法:獲取架構名單的mysqli

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

這是爲什麼? 此外,爲什麼不更新mysql_list_dbs()函數與mysqli一起使用?

結論

其他任何人試圖讓數據庫列表,這是我的功能(希望我能挽救這個問題有些用處)。

用'數據庫'代替想要返回的數據庫的前綴,或者只是將其刪除以獲取所有數據庫的前綴。

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

'fetch_row'從返回的結果數據的單行。您需要在循環中獲取所有行。 –

+0

Awwh ...現在我感到很傻,歡呼聲! – Edward

回答

2

您只提取第一行結果,通常第一個數據庫正好是information schema。要列出所有的人,試試這個:

$list = array(); 
while($row = mysqli_fetch_row($databases)) { 
    $list[] = $row; 
} 
print_r($list); 
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); 
+0

我想獲取所有數據庫的列表,但它只返回一個模式「information_schema」,爲什麼不是所有數據庫?請幫忙。 – Sandeep

+0

您正在連接的'mysql'用戶是否有權限使用其他模式?你可以通過'mysql'命令行試試嗎? –

+0

如果我通過PDO列表,那麼它的工作。現在我已經改變了邏輯,並使用PDO。按預期工作.. – Sandeep