注意:舊版 mysql_* 函式已於 PHP 7.0 移除,現代專案請使用 mysqli (程序/物件風格) 或 PDO (資料庫抽象層)。
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
if ($mysqli->connect_errno) {
die('連線失敗: ' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4'); // 重要:設定字元集
// 查詢
$result = $mysqli->query('SELECT * FROM users');
while ($row = $result->fetch_assoc()) {
echo $row['name'] . '
';
}
$result->free();
$mysqli->close();
?>
<?php
$dsn = 'mysql:host=localhost;dbname=database;charset=utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, 'user', 'password', $options);
// 準備語句 (防 SQL 注入)
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id'] ?? 1]);
$user = $stmt->fetch();
var_dump($user);
} catch (PDOException $e) {
die('連線失敗: ' . $e->getMessage());
}
?>
| 特性 | mysqli | PDO |
|---|---|---|
| 資料庫支援 | 僅 MySQL | 12+ 驅動 |
| 預處理語句 | 支援 | 支援 (模擬/原生) |
| 命名參數 | 不支援 | 支援 :name |
| 物件/程序雙介面 | 是 | 僅物件 |
charset=utf8mb4 完整支援 Emoji。ERRMODE_EXCEPTION 統一異常處理。