雖然 mysql_* 函數已棄用(PHP 7.0 移除),但理解完整流程有助於掌握資料庫操作核心概念。現代專案請改用 PDO 或 MySQLi。
<?php
// 1. 建立連線
$link = mysql_connect('localhost', 'root', 'your_password')
or die('連線失敗: ' . mysql_error());
// 2. 選擇資料庫
mysql_select_db('your_database', $link)
or die('選擇資料庫失敗: ' . mysql_error());
// 3. 執行查詢
$query = 'SELECT * FROM products';
$result = mysql_query($query, $link)
or die('查詢失敗: ' . mysql_error());
// 4. 處理結果
echo '<table border="1">';
echo '<tr><th>ID</th><th>名稱</th><th>價格</th></tr>';
while ($row = mysql_fetch_assoc($result)) {
echo '<tr>';
foreach ($row as $value) {
echo '<td>' . htmlspecialchars($value) . '</td>';
}
echo '</tr>';
}
echo '</table>';
// 5. 釋放資源
mysql_free_result($result);
// 6. 關閉連線
mysql_close($link);
?>
<?php
try {
$pdo = new PDO(
'mysql:host=localhost;dbname=your_db;charset=utf8mb4',
'username',
'password',
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]
);
$stmt = $pdo->query('SELECT id, name, price FROM products');
echo '<table border="1"><tr><th>ID</th><th>名稱</th><th>價格</th></tr>';
foreach ($stmt as $row) {
echo '<tr><td>' . $row['id'] . '</td>';
echo '<td>' . htmlspecialchars($row['name']) . '</td>';
echo '<td>' . $row['price'] . '</td></tr>';
}
echo '</table>';
} catch (PDOException $e) {
error_log('資料庫錯誤: ' . $e->getMessage());
echo '系統暫時無法服務,請稍後再試。';
}
?>
| 特性 | mysql_* | PDO |
|---|---|---|
| SQL 注入防護 | 手動 escape | 預處理語句 |
| 資料庫支援 | 僅 MySQL | 12+ 種資料庫 |
| 錯誤處理 | die/or | Exception |
| 物件導向 | 否 | 是 |
| PHP 7+ 支援 | 已移除 | 完全支援 |
htmlspecialchars() 輸出資料防 XSSprepare() + execute())處理動態查詢