展示 PHP 連接 MySQL、執行 SELECT 查詢、遍歷結果集的最基礎流程,適合零基礎入門。注意:舊代碼使用已移除的 mysql_* 函數,現代 PHP (7.0+) 必須使用 mysqli 或 PDO。
<?php
// 數據庫配置
$host = 'localhost';
$port = 3306;
$user = 'root';
$pass = '9999';
$dbname = 'ok';
// 1. 建立連接
$mysqli = new mysqli($host, $user, $pass, $dbname, $port);
if ($mysqli->connect_errno) {
die("連接失敗:{$mysqli->connect_error}");
}
$mysqli->set_charset('utf8mb4'); // 重要:設置字符集
// 2. 執行查詢
$sql = "SELECT `id`, `name` FROM `abc`";
$result = $mysqli->query($sql);
if (!$result) {
die("查詢失敗:{$mysqli->error}");
}
// 3. 遍歷結果集
echo "<table border='1' cellpadding='5'>";
echo "<tr><th>ID</th><th>Name</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . htmlspecialchars($row['id']) . "</td>";
echo "<td>" . htmlspecialchars($row['name']) . "</td>";
echo "</tr>";
}
echo "</table>";
// 4. 釋放結果、關閉連接
$result->free();
$mysqli->close();
?>
<?php
$dsn = "mysql:host=localhost;port=3306;dbname=ok;charset=utf8mb4";
$user = 'root';
$pass = '9999';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false, // 使用真實預處理
]);
$sql = "SELECT `id`, `name` FROM `abc`";
$stmt = $pdo->query($sql);
echo "<table border='1' cellpadding='5'>";
echo "<tr><th>ID</th><th>Name</th></tr>";
foreach ($stmt as $row) {
echo "<tr>";
echo "<td>" . htmlspecialchars($row['id']) . "</td>";
echo "<td>" . htmlspecialchars($row['name']) . "</td>";
echo "</tr>";
}
echo "</table>";
} catch (PDOException $e) {
die("數據庫錯誤:" . $e->getMessage());
}
?>
<?php
// ⚠️ 已棄用,PHP 7.0+ 已移除
$dbh = @mysql_connect("localhost:3306", "root", "9999");
if (!$dbh) die("error");
@mysql_select_db("ok", $dbh);
$q = "SELECT * FROM abc";
$rs = mysql_query($q, $dbh);
if (!$rs) die("Valid result!");
echo "<table><tr><td>ID</td><td>Name</td></tr>";
while ($row = mysql_fetch_row($rs)) {
echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>";
}
?>
| 特性 | mysql_* (舊) | mysqli | PDO |
|---|---|---|---|
| PHP 版本支援 | ≤ 5.6 | 5.0+ | 5.1+ |
| 預處理語句 | 無 | 支援 | 支援 |
| 多數據庫 | 無 | 僅 MySQL | 支援 12+ 驅動 |
| 面向對象 | 無 | 支援 | 支援 |
| 異常處理 | 無 | 可選 | 原生支援 |
prepare() + bind_param() / execute([...]),防止 SQL 注入。PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,避免靜默失敗。htmlspecialchars() 防 XSS。<?php
// mysqli
$stmt = $mysqli->prepare("SELECT `id`, `name` FROM `abc` WHERE `id` > ?");
$minId = 5;
$stmt->bind_param('i', $minId);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) { ... }
// PDO
$stmt = $pdo->prepare("SELECT `id`, `name` FROM `abc` WHERE `id` > :min_id");
$stmt->execute(['min_id' => 5]);
foreach ($stmt as $row) { ... }