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

PHP 打造 MySQL 資料庫瀏覽器:三層架構遞迴導航實作

     編輯:PHP 綜合知識

專案簡介

本程式實作一個輕量級的 MySQL 資料庫瀏覽器,採用單一檔案架構,透過 cmd 參數控制三層導航流程:資料庫列表 → 資料表列表 → 記錄內容。適合快速檢視資料庫結構與資料,可作為管理工具雛形擴充。

核心架構設計

狀態機制御流程

if(!isset($cmd)) $cmd = 'db';
switch($cmd){
    case 'db':    break;      // 顯示資料庫列表
    case 'table': break;      // 顯示指定資料庫的資料表
    case 'record':break;      // 顯示指定資料表的記錄
    default:      $cmd='db';  // 預設回資料庫列表
}

使用 switch-case 實作簡單狀態機,根據 cmd 參數決定顯示層級,邏輯清晰易維護。

資料庫連線設定

$host = 'localhost';
$user = 'test';
$password = '';
$con = @mysql_connect($host,$user,$password) or die('無法連接'.$host);

基本連線設定,生產環境建議改用環境變數管理敏感資訊。

三層導航詳細實作

第 1 層:資料庫列表 (?cmd=db)

case 'db':
    $dbs = mysql_list_dbs($con) or die('mysql_list_dbs 出錯:'.$php_errmsg);
    echo 'databases on '.$host.':<br>'.chr(13);
    $num_rows = mysql_num_rows($dbs);
    for($i=0;$i<$num_rows;$i++){
        $db = mysql_tablename($dbs,$i);
        echo '<a href="'.$PHP_SELF.'?cmd=table&db='.urlencode($db).'">'.$db.'</a><br>'.chr(13);
    }
    mysql_free_result($dbs);
    break;

呼叫 mysql_list_dbs() 取得所有資料庫,產生連結指向第 2 層並帶入資料庫名稱。

第 2 層:資料表列表 (?cmd=table&db=xxx)

case 'table':
    $tables = @mysql_list_tables($db,$con) or die('mysql_list_tables 出錯:'.$php_errmsg);
    echo 'tables on '.$db.' of '.$host.':<br>'.chr(13);
    $num_rows = mysql_num_rows($tables);
    for($i=0;$i<$num_rows;$i++){
        $table = mysql_tablename($tables,$i);
        echo '<a href="'.$PHP_SELF.'?cmd=record&db='.urlencode($db).'&table='.urlencode($table).'">'.$table.'</a><br>'.chr(13);
    }
    mysql_free_result($tables);
    echo '<hr><a href="'.$PHP_SELF.'?cmd=db">show databases</a>'.chr(13);
    break;

使用 mysql_list_tables() 列出指定資料庫的所有資料表,提供返回資料庫列表的導航連結。

第 3 層:記錄內容顯示 (?cmd=record&db=xxx&table=yyy)

case 'record':
    $records = mysql_db_query($db,'select * from '.$table,$con) or die('mysql_db_query 出錯:'.$php_errmsg);
    echo 'records on '.$table.':<br>'.chr(13);
    echo '<table border="1" cellspacing="0" cellpadding="0">'.chr(13);
    echo '<tr>'.chr(13);
    $num_fields = mysql_num_fields($records);
    for($i=0;$i<$num_fields;$i++)
        echo '<th> '.mysql_field_name($records,$i).'</th>'.chr(13);
    echo '</tr>'.chr(13);
    while($row=mysql_fetch_row($records)){
        echo '<tr>'.chr(13);
        for($i=0;$i<$num_fields;$i++)
            echo '<td> '.$row[$i].'</td>'.chr(13);
        echo '</tr>'.chr(13);
    }
    echo '</table>'.chr(13);
    mysql_free_result($records);
    echo '<hr><a href="'.$PHP_SELF.'?cmd=db">show databases</a>  <a href="'.$PHP_SELF.'?cmd=table&db='.urlencode($db).'">show tables</a>'.chr(13);
    break;

執行 SELECT * 查詢並以 HTML 表格呈現,動態產生欄位標題與資料列,提供雙層返回導航。

安全性風險與必要改進

⚠️ 高風險問題

  • SQL 注入:$table 直接拼接進 SQL,攻擊者可構造 ?cmd=record&db=test&table=users;DROP TABLE users;--
  • 資訊洩露:無認證機制,任何人可瀏覽完整資料庫結構與資料
  • 棄用函式:全程使用 mysql_*,PHP 7.0+ 已移除
  • 錯誤訊息外洩:die() 直接輸出 SQL 錯誤細節

現代化重構方向

// PDO 版本資料庫列表範例
$pdo = new PDO("mysql:host=$host;charset=utf8", $user, $password);
$dbs = $pdo->query("SHOW DATABASES")->fetchAll(PDO::FETCH_COLUMN);
foreach($dbs as $db) {
    echo "<a href='?cmd=table&db=".urlencode($db)."'>$db</a><br>";
}

建議採用 PDO + 預處理語句、加入登入驗證、實作資料表名稱白名單驗證、使用模板引擎分離邏輯與顯示。

擴充功能構想

  • SQL 查詢介面:整合類似 phpMyAdmin 的查詢編輯器
  • 資料匯出:支援 CSV、JSON、SQL 匯出格式
  • 結構管理:建立/修改/刪除資料表、索引視覺化操作
  • 權限控管:角色基礎存取控制(RBAC)
  • 響應式介面:Bootstrap 重構前端,支援行動裝置

這個簡單的瀏覽器展示了 PHP 操作 MySQL 中繼資料的核心 API 用法。雖然原始版本存在安全隱憂,但架構概念清晰,是學習資料庫管理工具開發的良好起點。實際部署前請務必完成安全性強化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved