db_create.php 是 phpMyAdmin 建立資料庫的入口腳本,採用典型的 MVC 風格分層:
common.inc.php、mysql_charsets.lib.phpPMA_checkParameters()PMA_checkParameters(array('db'));
確保必填參數 db 存在,防止 CSRF 結合 XSS 攻擊。
$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) 才支援字元集子句$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 多驅動。失敗時清空全域資料庫變數,避免導航欄顯示殘留資訊。
PMA_DBI,易於遷移驅動$str* 變數,支援多語言