雖然官方建議使用 PDO/MySQLi,但舊專案仍大量使用 mysql_* 函數(PHP 7.0 已移除)。本文提供一份精簡、可直接複製執行的參考範例,並標註現代替代寫法。
<?php
// 1. 連線
$conn = mysql_connect('localhost', 'root', '123456');
if (!$conn) die('連線失敗: ' . mysql_error());
// 2. 選擇資料庫
mysql_select_db('products', $conn);
// 3. 設定字符集(防亂碼)
mysql_query('SET NAMES utf8', $conn);
// --- 查詢 ---
$sql = 'SELECT * FROM `category`';
$res = mysql_query($sql, $conn);
while ($row = mysql_fetch_assoc($res)) {
echo $row['id'] . ' - ' . $row['name'] . '<br>';
}
mysql_free_result($res);
// --- 新增 ---
$name = mysql_real_escape_string('測試分類', $conn);
$sql = "INSERT INTO `category` (`name`) VALUES ('$name')";
mysql_query($sql, $conn);
if (mysql_affected_rows($conn)) {
echo '新增成功,ID: ' . mysql_insert_id($conn);
} else {
echo '新增失敗: ' . mysql_error($conn);
}
// --- 修改 ---
$id = 1;
$newName = mysql_real_escape_string('更新名稱', $conn);
$sql = "UPDATE `category` SET `name`='$newName' WHERE `id`=$id";
mysql_query($sql, $conn);
if (mysql_affected_rows($conn)) echo '修改成功';
// --- 刪除 ---
$sql = "DELETE FROM `category` WHERE `id`=$id";
mysql_query($sql, $conn);
if (mysql_affected_rows($conn)) echo '刪除成功';
// 5. 關閉連線
mysql_close($conn);
?>
<?php
$dsn = 'mysql:host=localhost;dbname=products;charset=utf8mb4';
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, 'root', '123456', $opt);
// 查詢
$stmt = $pdo->query('SELECT * FROM `category`');
foreach ($stmt as $row) { echo $row['id'] . ' - ' . $row['name'] . '<br>'; }
// 新增(預處理)
$stmt = $pdo->prepare('INSERT INTO `category` (`name`) VALUES (?)');
$stmt->execute(['測試分類']);
echo '新增 ID: ' . $pdo->lastInsertId();
// 修改
$stmt = $pdo->prepare('UPDATE `category` SET `name`=? WHERE `id`=?');
$stmt->execute(['更新名稱', 1]);
// 刪除
$stmt = $pdo->prepare('DELETE FROM `category` WHERE `id`=?');
$stmt->execute([1]);
?>
$mysqli = new mysqli('localhost', 'root', '123456', 'products');
$mysqli->set_charset('utf8mb4');
$stmt = $mysqli->prepare('SELECT * FROM `category`');
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) { /* ... */ }
$stmt = $mysqli->prepare('INSERT INTO `category` (`name`) VALUES (?)');
$stmt->bind_param('s', $name);
$name = '測試';
$stmt->execute();
echo 'ID: ' . $mysqli->insert_id;
| 特性 | mysql_* | MySQLi | PDO |
|---|---|---|---|
| PHP 7+ 支援 | ❌ 移除 | ✅ | ✅ |
| 預處理 | ❌ | ✅ | ✅ |
| 多資料庫驅動 | ❌ | ❌ | ✅ |
| 物件導向 | ❌ | ✅ | ✅ |
| 命名參數綁定 | ❌ | ❌ | ✅ |
結論:新專案請直接使用 PDO;維護舊專案時,儘快規劃遷移至 PDO/MySQLi。