本文示範 PHP 從 MySQL 查詢資料的兩種常見模式:列表頁顯示所有使用者摘要,詳細頁根據 ID 顯示單一筆完整資料。使用 mysqli 預備語句確保安全。
CREATE TABLE `userinfo` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL,
`gender` ENUM('M','F') NOT NULL,
`age` TINYINT UNSIGNED NOT NULL,
`regdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
<?php
require_once 'db_connect.php'; // 包含 $mysqli 連線物件
$sql = "SELECT `id`, `username`, `gender`, `age`, `regdate` FROM `userinfo` ORDER BY `id` DESC";
$stmt = $mysqli->prepare($sql);
$stmt->execute();
$result = $stmt->get_result();
?>
<table border="1" cellpadding="5">
<thead>
<tr><th>編號</th><th>用戶名稱</th><th>性別</th><th>年齡</th><th>註冊時間</th><th>操作</th></tr>
</thead>
<tbody>
<?php while ($row = $result->fetch_assoc()): ?>
<tr>
<td><?= $row['id'] ?></td>
<td><?= htmlspecialchars($row['username']) ?></td>
<td><?= $row['gender'] ?></td>
<td><?= $row['age'] ?></td>
<td><?= $row['regdate'] ?></td>
<td><a href="detail.php?id=<?= $row['id'] ?>">查看詳情</a></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php
$stmt->close();
$mysqli->close();
?>
<?php
require_once 'db_connect.php';
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($id <= 0) {
die("無效的 ID");
}
$stmt = $mysqli->prepare("SELECT `id`, `username`, `gender`, `age`, `regdate` FROM `userinfo` WHERE `id` = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
?>
<dl>
<dt>編號</dt><dd><?= $row['id'] ?></dd>
<dt>用戶名</dt><dd><?= htmlspecialchars($row['username']) ?></dd>
<dt>性別</dt><dd><?= $row['gender'] === 'M' ? '男' : '女' ?></dd>
<dt>年齡</dt><dd><?= $row['age'] ?></dd>
<dt>註冊時間</dt><dd><?= $row['regdate'] ?></dd>
</dl>
<p><a href="list.php">返回列表</a></p>
<?php
} else {
echo "<p>找不到該使用者</p>";
}
$stmt->close();
$mysqli->close();
?>
<?php
require_once 'db_connect.php';
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($id > 0) {
// 詳細檢視
$stmt = $mysqli->prepare("SELECT * FROM `userinfo` WHERE `id` = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
$stmt->close();
if ($row) {
// 輸出詳細資料 HTML...
} else {
echo "<p>資料不存在</p>";
}
} else {
// 列表檢視
$result = $mysqli->query("SELECT `id`, `username`, `gender`, `age`, `regdate` FROM `userinfo` ORDER BY `id` DESC");
// 輸出表格 HTML...
$result->free();
}
$mysqli->close();
?>
htmlspecialchars() 轉義。prepare + bind_param)防止 SQL Injection。(int)$_GET['id'] 強制轉整數。