PHP 官方早已淘汰舊版 mysql_* 函式,推薦使用 mysqli(MySQL Improved)或 PDO_MySQL。mysqli 提供物件導向與程序式兩種風格,支援預處理語句、事務處理、多重查詢等進階功能,是現代 PHP 開發的主流選擇。
$db = new mysqli('localhost', 'root', '123456', 'dbname');
// 檢查連接錯誤
if ($db->connect_errno) {
die("連接失敗: " . $db->connect_error);
}
$db->select_db('dbname');
$query = "SELECT * FROM user WHERE uid = 4"; $result = $db->query($query); // 獲取行數 $result_num = $result->num_rows; // 四種獲取單行資料的方式 $row_assoc = $result->fetch_assoc(); // 關聯陣列:$row['uid'] $row_row = $result->fetch_row(); // 數值索引陣列:$row[0] $row_array = $result->fetch_array(); // 混合陣列:$row['uid'] 與 $row[0] 皆可 $row_object = $result->fetch_object(); // 物件:$row->uid
$result->free(); // 釋放結果集記憶體 $db->close(); // 關閉連接(腳本結束會自動關閉,但建議顯式調用)
$affected = $db->affected_rows; // INSERT/UPDATE/DELETE 影響的行數
$db = mysqli_connect('localhost', 'root', '123456', 'dbname');
if (!$db) {
die("連接失敗: " . mysqli_connect_error());
}
mysqli_select_db($db, 'dbname');
$query = "SELECT * FROM user WHERE uid = 4"; $result = mysqli_query($db, $query); $result_num = mysqli_num_rows($result);
$row = mysqli_fetch_assoc($result); // 關聯陣列 $row = mysqli_fetch_row($result); // 數值索引陣列 $row = mysqli_fetch_array($result); // 混合陣列 $row = mysqli_fetch_object($result); // 物件
mysqli_free_result($result); mysqli_close($db);
$affected = mysqli_affected_rows($db);
connect_errno、errno 等錯誤代碼。$db->set_charset('utf8mb4'); 避免亂碼。| 問題 | 解決方案 |
|---|---|
| 連接超時 | 檢查 max_connections、防火牆、主機名解析 |
| 中文亂碼 | 資料表、連接、PHP 檔案編碼統一為 UTF-8/utf8mb4 |
| 預處理語句失效 | 確認 SQL 語法正確,參數綁定型別匹配 |