首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 使用 mysqli 擴展連接 MySQL 資料庫完整教學

     編輯:MySQL 資料庫相關知識

前言

PHP 官方早已淘汰舊版 mysql_* 函式,推薦使用 mysqli(MySQL Improved)或 PDO_MySQL。mysqli 提供物件導向與程序式兩種風格,支援預處理語句、事務處理、多重查詢等進階功能,是現代 PHP 開發的主流選擇。

一、物件導向風格

1. 建立連接

$db = new mysqli('localhost', 'root', '123456', 'dbname');

// 檢查連接錯誤
if ($db->connect_errno) {
    die("連接失敗: " . $db->connect_error);
}

2. 切換資料庫

$db->select_db('dbname');

3. 執行查詢與獲取結果

$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

4. 釋放資源與關閉連接

$result->free();  // 釋放結果集記憶體
$db->close();     // 關閉連接(腳本結束會自動關閉,但建議顯式調用)

5. 寫入操作影響行數

$affected = $db->affected_rows; // INSERT/UPDATE/DELETE 影響的行數

二、程序式風格

1. 建立連接

$db = mysqli_connect('localhost', 'root', '123456', 'dbname');

if (!$db) {
    die("連接失敗: " . mysqli_connect_error());
}

2. 切換資料庫

mysqli_select_db($db, 'dbname');

3. 執行查詢

$query = "SELECT * FROM user WHERE uid = 4";
$result = mysqli_query($db, $query);
$result_num = mysqli_num_rows($result);

4. 獲取結果行

$row = mysqli_fetch_assoc($result);  // 關聯陣列
$row = mysqli_fetch_row($result);    // 數值索引陣列
$row = mysqli_fetch_array($result);  // 混合陣列
$row = mysqli_fetch_object($result); // 物件

5. 釋放與關閉

mysqli_free_result($result);
mysqli_close($db);

6. 寫入操作影響行數

$affected = mysqli_affected_rows($db);

三、最佳實踐建議

  • 優先使用物件導向:程式碼更清晰,易於維護與擴充。
  • 善用預處理語句:防止 SQL 注入,提升重複查詢效能。
  • 錯誤處理:生產環境務必檢查 connect_errno、errno 等錯誤代碼。
  • 字元集設定:連接後執行 $db->set_charset('utf8mb4'); 避免亂碼。

四、常見問題

問題解決方案
連接超時檢查 max_connections、防火牆、主機名解析
中文亂碼資料表、連接、PHP 檔案編碼統一為 UTF-8/utf8mb4
預處理語句失效確認 SQL 語法正確,參數綁定型別匹配
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved