⚠️ 警告:PHP 5.5.0 棄用,PHP 7.0.0 移除。僅供維護老項目參考。
$con = mysql_connect($host, $user, $pass) or die("連接失敗: " . mysql_error());
mysql_select_db($dbname, $con);
// 執行查詢
$qres = mysql_query("SELECT id, GoodsName FROM user");
// 獲取結果集三種方式對比
// 1. mysql_fetch_row() - 數值索引數組
$row = mysql_fetch_row($qres); // [0 => '1', 1 => '商品A']
// 2. mysql_fetch_assoc() - 關聯索引數組
$row = mysql_fetch_assoc($qres); // ['id' => '1', 'GoodsName' => '商品A']
// 3. mysql_fetch_array() - 雙模式(默認 MYSQL_BOTH)
$row = mysql_fetch_array($qres); // 同時包含數值和關聯索引
// 遍歷所有行
$reslist = [];
while ($row = mysql_fetch_assoc($qres)) {
$reslist[] = $row;
}
mysql_close($con);
// @ 抑制系統錯誤,die() 自定義友好提示
$con = @mysql_connect($host, $user, $pass) or die("數據庫連接失敗,請稍後重試");
MySQL Enhanced,支持面向過程與面向對象雙模式,支持預處理、事務、多語句等高級特性。
$db = new mysqli($host, $user, $pass, $dbname);
if (mysqli_connect_error()) {
die('連接失敗: ' . mysqli_connect_error());
}
// 查詢
$result = $db->query("SELECT id, GoodsName FROM user");
// 獲取單行
$row = $result->fetch_assoc(); // 關聯數組
$row = $result->fetch_row(); // 數值數組
$row = $result->fetch_array(); // 雙模式
// 遍歷
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
// 釋放結果集
$result->free();
// 預處理語句(防注入、提升性能)
$stmt = $db->prepare("SELECT * FROM user WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$res = $stmt->get_result();
while ($row = $res->fetch_assoc()) { /* ... */ }
$stmt->close();
$db->close();
$con = mysqli_connect($host, $user, $pass, $dbname); $result = mysqli_query($con, "SELECT * FROM user"); $row = mysqli_fetch_assoc($result); // ... 類似面向對象 API mysqli_close($con);
數據庫抽象層,統一 API 操作 MySQL、SQLite、PostgreSQL、Oracle 等多種數據庫,僅需更改 DSN(Data Source Name)。
// MySQL $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4"; $dbh = new PDO($dsn, $user, $pass); // SQLite $dsn = "sqlite:/path/to/database.db"; $dbh = new PDO($dsn); // PostgreSQL $dsn = "pgsql:host=$host;port=5432;dbname=$dbname;user=$user;password=$pass"; $dbh = new PDO($dsn);
// 設置錯誤模式為異常(推薦)
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 查詢
$stmt = $dbh->query("SELECT id, name FROM user");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$data[] = $row;
}
// 預處理(核心優勢)
$stmt = $dbh->prepare("SELECT * FROM user WHERE id = :id");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 事務控制
$dbh->beginTransaction();
try {
$dbh->exec("INSERT ...");
$dbh->exec("UPDATE ...");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
throw $e;
}
| 特性 | mysql | mysqli | PDO |
|---|---|---|---|
| PHP 版本支持 | ≤ 5.6(已移除) | 5.0+ | 5.1+ |
| 面向對象 | ❌ | ✅ | ✅ |
| 預處理語句 | ❌ | ✅ | ✅ |
| 多數據庫支持 | ❌ 仅 MySQL | ❌ 仅 MySQL | ✅ 12+ 驅動 |
| 事務支持 | ❌ | ✅ | ✅ |
| 性能 | 基礎 | 優秀 | 優秀(略高開銷) |
| 推薦指數 | ⭐ (禁用) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
utf8mb4 字符集完整支持 Emoji