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

phpMyAdmin 核心源碼解析:資料庫建立流程深度剖析

     編輯:PHP 相關知識

源碼結構概覽

db_create.php 是 phpMyAdmin 建立資料庫的入口腳本,採用典型的 MVC 風格分層:

  • 核心庫載入:common.inc.php、mysql_charsets.lib.php
  • 參數驗證:PMA_checkParameters()
  • SQL 組裝與執行
  • 結果導向:成功跳轉預設分頁,失敗顯示錯誤

關鍵流程詳解

1. 參數檢查與安全防護

PMA_checkParameters(array('db'));

確保必填參數 db 存在,防止 CSRF 結合 XSS 攻擊。

2. 字元集與排序規則智能組裝

$sql_query = 'CREATE DATABASE ' . PMA_backquote($db);
if (!empty($db_collation) && PMA_MYSQL_INT_VERSION >= 40101) {
    list($db_charset) = explode('_', $db_collation);
    if (in_array($db_charset, $mysql_charsets) 
        && in_array($db_collation, $mysql_collations[$db_charset])) {
        $sql_query .= ' DEFAULT' . PMA_generateCharsetQueryPart($db_collation);
    }
}
$sql_query .= ';';

亮點:

  • PMA_backquote() 反引號包裹,防止保留字衝突
  • 版本檢查 40101 (MySQL 4.1.1) 才支援字元集子句
  • 白名單驗證字元集/排序規則,杜絕 SQL 注入

3. 執行與錯誤處理

$result = PMA_DBI_try_query($sql_query);
if (!$result) {
    $message = PMA_DBI_getError();
    $GLOBALS['db'] = $GLOBALS['table'] = '';
    require './libraries/header.inc.php';
    require './main.php';
} else {
    $message = $strDatabase . ' ' . htmlspecialchars($db) . ' ' . $strHasBeenCreated;
    require './libraries/header.inc.php';
    require './' . $cfg['DefaultTabDatabase'];
}

統一使用 PMA_DBI_* 抽象層,支援 mysqli、PDO 多驅動。失敗時清空全域資料庫變數,避免導航欄顯示殘留資訊。

架構設計啟示

  1. 抽象層解耦:資料庫操作統一走 PMA_DBI,易於遷移驅動
  2. 國際化就緒:所有訊息透過 $str* 變數,支援多語言
  3. 安全優先:參數檢查、輸出轉義、白名單驗證三重防護
  4. 向後相容:版本號判斷優雅降級

二次開發應用場景

  • 自動化部署腳本調用此邏輯批量建庫
  • 整合至 CI/CD 流水線,驗證資料庫命名規範
  • 擴充建庫後自動執行初始化 SQL(建表、灌種子資料)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved