首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 入門

MySQL 選擇資料庫 USE 指令與 PHP mysql_select_db 完全指南

     編輯:MySQL 入門

MySQL 選擇資料庫 USE 指令與 PHP mysql_select_db 完全指南

連線 MySQL 後,伺服器實例上可能存在數十個資料庫(Schema)。USE 指令(命令列)或 mysql_select_db()(PHP)將當前會話的「預設資料庫」切換至目標庫,後續無前綴的表操作將在該庫下執行。本文講解語法、大小寫敏感規則、PHP 實戰與連線池場景下的注意事項。

命令列:USE 指令

mysql> USE RUNOOB;
Database changed
  • 指令不需分號結尾(加分號也可執行)。
  • 切換成功後,SELECT * FROM t; 等同於 SELECT * FROM RUNOOB.t;。
  • 資料庫名、表名、欄位名在 Linux/Unix 上區分大小寫(取決於 lower_case_table_names 系統變數,Windows 預設不區分)。建議統一小寫命名,代碼中嚴格按建表大小寫引用。

PHP:mysqli_select_db() / PDO

mysqli 程序風格(舊版 mysql_select_db 已棄用/移除)

<?php
$conn = mysqli_connect('localhost:3306', 'guest', 'guest123');
if (!$conn) die('Connect failed: ' . mysqli_connect_error());

// 選擇資料庫
if (!mysqli_select_db($conn, 'RUNOOB')) {
    die('Select DB failed: ' . mysqli_error($conn));
}
echo 'Database selected successfully';
mysqli_close($conn);
?>

mysqli 物件風格(推薦)

<?php
$conn = new mysqli('localhost:3306', 'guest', 'guest123', 'RUNOOB'); // 連線時直接指定
if ($conn->connect_error) die('Connect failed: ' . $conn->connect_error);

// 或後續切換
$conn->select_db('OTHER_DB');
?>

PDO(推薦現代專案)

<?php
$dsn = 'mysql:host=localhost;port=3306;dbname=RUNOOB;charset=utf8mb4';
$pdo = new PDO($dsn, 'guest', 'guest123', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
]);
// 連線即選庫,無需額外呼叫
?>

連線池 / 長連線場景的陷阱

  • 連線池複用連線:從池取出的連線可能仍停留在上一個請求選擇的資料庫。每次取用必須顯式選庫,或連線字串指定 dbname(PDO/mysqli 物件風格支援)。
  • 不要依賴預設資料庫:SQL 中始終使用完整限定名 `db_name`.`table_name`,避免會話預設庫不一致導致跨庫誤操作。

權限控制

  • 使用者需具備目標資料庫的權限(至少 USAGE 或具體表權限)。
  • 應用帳號遵循最小權限原則:僅授予所需庫的 SELECT/INSERT/UPDATE/DELETE,不給 DROP/CREATE/ALTER。

常見錯誤

  • Error 1044: Access denied for user ''@'%' to database 'RUNOOB':權限不足,需 GRANT ... ON RUNOOB.* TO 'user'@'host';
  • Error 1049: Unknown database 'runoob':庫名大小寫錯誤(Linux 區分大小寫),核對實際庫名。

最佳實踐總結

  1. 連線字串/DSN 直接指定 dbname,避免額外選庫呼叫。
  2. SQL 寫死 `db`.`table`,不依賴會話預設庫。
  3. 命名規範:庫/表/欄全小寫下劃線,杜絕大小寫敏感坑。
  4. 權限最小化,生產帳號無 DDL 權限。

選擇資料庫雖是簡單動作,卻是跨庫誤操作、大小寫 Bug、權限洩漏的高發區。將「連線即選庫、SQL 全限定名、命名全小寫」貫徹落地,從源頭消除這類低級錯誤。

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