首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 列出 MySQL 所有資料庫的三種遍歷方式對比

     編輯:PHP 綜合知識

功能需求

連接 MySQL 伺服器,獲取當前用戶權限下可見的所有資料庫列表,並以 HTML 清單形式輸出。

核心代碼結構

define('NL', "\n");
define('TB', '  ');

$conn = @mysql_connect('localhost', 'username', 'password')
    or die(mysql_errno().': '.mysql_error().NL);

$result = mysql_list_dbs($conn);

echo '
    '.NL; // 三種遍歷方式任選其一 // 方式 1: mysql_fetch_object() while ($row = mysql_fetch_object($result)) { echo TB.'
  • '.$row->Database.'
  • '.NL; } // 方式 2: mysql_fetch_row() while ($row = mysql_fetch_row($result)) { echo TB.'
  • '.$row[0].'
  • '.NL; } // 方式 3: mysql_fetch_assoc() while ($row = mysql_fetch_assoc($result)) { echo TB.'
  • '.$row['Database'].'
  • '.NL; } echo '
'.NL; mysql_free_result($result); mysql_close($conn);

關鍵問題:mysql_* 擴展已移除

PHP 5.5.0 棄用,PHP 7.0.0 完全移除。 必須遷移至 mysqli 或 PDO。

現代化重寫 (PDO 推薦)

function listDatabases(PDO $pdo): array {
    $stmt = $pdo->query('SHOW DATABASES');
    return $stmt->fetchAll(PDO::FETCH_COLUMN);
}

// 使用範例
try {
    $pdo = new PDO('mysql:host=localhost;charset=utf8mb4', 'user', 'pass', [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    $dbs = listDatabases($pdo);
    echo '
    '; foreach ($dbs as $db) { echo "
  • " . htmlspecialchars($db) . "
  • "; } echo '
'; } catch (PDOException $e) { error_log($e->getMessage()); echo "Database connection failed."; }

mysqli 版本

$mysqli = new mysqli('localhost', 'user', 'pass');
if ($mysqli->connect_errno) die('Connect failed: '.$mysqli->connect_error);

$result = $mysqli->query('SHOW DATABASES');
while ($row = $result->fetch_row()) {
    echo "
  • " . htmlspecialchars($row[0]) . "
  • "; } $result->free(); $mysqli->close();

    權限說明

    • SHOW DATABASES 權限:決定可見哪些資料庫
    • 無此權限時,僅顯示擁有權限的資料庫
    • information_schema 通常始終可見

    效能與安全建議

    • 避免在前端直接列出所有資料庫(資訊洩露風險)
    • 管理介面需加入認證授權、CSRF 保護
    • 大量資料庫時考慮分頁或搜尋過濾
    • 使用預處理語句防止注入(雖然 SHOW DATABASES 無參數)
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved