PHP 操作 MySQL 的標準流程包含:連線、選擇資料庫、執行查詢、處理結果、釋放資源、關閉連線。本文詳細說明各步驟的最佳實踐與常見錯誤。
<?php
// 設定參數
$host = 'localhost';
$user = 'root';
$pass = 'admin';
$dbname = 'test';
try {
// 1. 建立連線 (自動設定字元集與錯誤模式)
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$pass,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]
);
echo "資料庫連線成功!繼續操作...<br>";
// 2. 執行查詢
$sql = "SELECT id, name, city FROM users";
$stmt = $pdo->query($sql);
// 3. 處理結果
$rows = $stmt->fetchAll();
$count = count($rows);
echo "SQL 語句:$sql <br>已成功執行!<br>";
echo "查詢到 <b>$count</b> 筆資料<br><br>";
// 顯示資料
foreach ($rows as $row) {
echo "ID: {$row['id']}, 姓名: {$row['name']}, 城市: {$row['city']}<br>";
}
// 4. 關閉連線 (PDO 物件銷毀時自動關閉,也可手動)
$pdo = null;
echo "<br>資料庫連線已成功關閉";
} catch (PDOException $e) {
die("操作失敗:" . $e->getMessage());
}
?>
mysql_* 函式自 PHP 5.5 棄用,PHP 7.0 移除。<?php
$host = 'localhost';
$user = 'root';
$pass = 'admin';
$dbname = 'test';
// 1. 連線
$conn = @mysql_connect($host, $user, $pass);
if (!$conn) {
die('連線失敗:' . mysql_error());
}
echo '連線成功!<br>';
// 2. 選擇資料庫
if (!@mysql_select_db($dbname, $conn)) {
die('選擇資料庫失敗:' . mysql_error());
}
// 3. 設定字元集 (重要!)
mysql_query("SET NAMES 'utf8'");
// 4. 執行查詢
$sql = "SELECT id, name, city FROM users";
$result = mysql_query($sql, $conn);
if (!$result) {
die('查詢失敗:' . mysql_error());
}
// 5. 取得筆數
$num = mysql_num_rows($result);
echo "查詢到 <b>$num</b> 筆資料<br>";
// 6. 處理結果
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
// 7. 釋放結果集記憶體
mysql_free_result($result);
// 8. 關閉連線
if (mysql_close($conn)) {
echo "<br>連線已關閉";
}
?>
| 項目 | mysql_* (舊) | PDO (新) | mysqli (新) |
|---|---|---|---|
| 連線物件 | 資源 handle | PDO 物件 | mysqli 物件 |
| 錯誤處理 | 手動檢查每步回傳值 | 例外模式 (推薦) | 例外模式或錯誤碼 |
| 字元集設定 | 手動 SET NAMES | DSN 指定 charset | set_charset() |
| 預備語句 | 不支援 | 完整支援 | 完整支援 |
| 多資料庫支援 | 僅 MySQL | 12+ 種驅動 | 僅 MySQL |
| 結果集釋放 | 需手動 mysql_free_result() | 自動 (變數超出範圍) | 需手動 free_result() |
| 連線關閉 | 需手動 mysql_close() | 自動 (物件銷毀) | 需手動 close() |
SELECT *,減少網路傳輸與記憶體使用LIMIT 分頁或游標避免記憶體耗盡現代 PHP 開發應全面採用 PDO,享受統一介面、預備語句安全性、例外錯誤處理等優勢。理解完整的連線查詢流程與資源管理,是撰寫高效、穩定資料庫應用的基礎。