首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP MySQL CRUD 完整實作範例(一):資料表建立與查詢所有/單筆資料

     編輯:PHP 綜合知識

本文提供傳統 mysql_* 函數時代的 MySQL 基本增刪改查 (CRUD) 範例,包含資料表結構、查詢所有記錄與依 ID 查詢單筆記錄的完整代碼。注意:mysql_* 函數已於 PHP 7.0 移除,新專案請改用 PDO 或 MySQLi。

資料表結構 (SQL)

CREATE TABLE `user` (
    `id` INT(5) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(20),
    `city` VARCHAR(20),
    `postcode` VARCHAR(10),
    `address` VARCHAR(100),
    `password` VARCHAR(10),
    `level` TINYINT(2) DEFAULT 0,
    `right` TINYINT(2),
    `email` VARCHAR(40),
    PRIMARY KEY (`id`),
    UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES
(1, '王友', '北京', '100083', '北京市海澱區學院路', '111', 0, 0, 'wangyou000@263.net'),
(2, '金風', '武漢', '430071', '武漢市武昌區水果湖', '111', 0, 0, 'jinfeng000@263.net'),
(3, '常麗', '襄樊', '441021', '襄樊市襄城區南街', '111', 0, 0, 'changli000@263.net');

1. 查詢所有記錄並輸出 HTML 表格

<?php
$db = mysql_connect("localhost", "root", "");
mysql_select_db("mysite", $db);

$result = mysql_query("SELECT * FROM `user`", $db);

echo "<table border=1>\n";
echo "<tr><th>ID</th><th>姓名</th><th>城市</th><th>郵編</th><th>住址</th><th>等級</th><th>權限</th><th>郵件</th></tr>\n";

while ($row = mysql_fetch_row($result)) {
    printf(
        "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
        $row[0], $row[1], $row[2], $row[3], $row[4], $row[6], $row[7], $row[8]
    );
}
echo "</table>\n";
mysql_free_result($result);
mysql_close($db);
?>

2. 依 ID 查詢單筆記錄(含列表連結)

<?php
$db = mysql_connect("localhost", "root", "");
mysql_select_db("mysite", $db);

if (isset($_GET['id'])) {
    $id = intval($_GET['id']); // 強制轉整數,防注入
    $result = mysql_query("SELECT * FROM `user` WHERE id = $id", $db);
    $row = mysql_fetch_assoc($result);
    if ($row) {
        printf("<h2>用戶詳細資料</h2>");
        printf("ID: %s<br>", $row['id']);
        printf("姓名: %s<br>", $row['name']);
        printf("城市: %s<br>", $row['city']);
        printf("郵編: %s<br>", $row['postcode']);
        printf("住址: %s<br>", $row['address']);
        printf("等級: %s<br>", $row['level']);
        printf("郵件: %s<br>", $row['email']);
        printf('<a href="%s">返回列表</a>', $_SERVER['PHP_SELF']);
    } else {
        echo "查無此用戶";
    }
} else {
    // 顯示用戶列表連結
    $result = mysql_query("SELECT id, name FROM `user`", $db);
    echo "<h2>請選擇要查詢的用戶:</h2>";
    while ($row = mysql_fetch_assoc($result)) {
        printf('%s <a href="%s?id=%s">%s</a><br>',
            $row['id'], $_SERVER['PHP_SELF'], $row['id'], $row['name']);
    }
}
mysql_close($db);
?>

關鍵安全與最佳實踐提醒

議題舊寫法風險現代修正
SQL 注入直接拼接變數 "WHERE id=$id"預處理語句 prepare() + 參數綁定
輸出跳脫直接 printf 變數htmlspecialchars() 防 XSS
資料庫擴展mysql_* (已移除)PDO / MySQLi
錯誤處理無檢查try-catch / 錯誤模式設定

現代 PDO 重寫片段(查詢所有)

<?php
$pdo = new PDO("mysql:host=localhost;dbname=mysite;charset=utf8", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->query("SELECT * FROM `user`");
echo "<table border=1><tr><th>ID</th><th>姓名</th>...</tr>";
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
    echo "<tr>";
    foreach ($row as $val) echo "<td>" . htmlspecialchars($val) . "</td>";
    echo "</tr>";
}
echo "</table>";
?>

理解傳統寫法有助於維護舊專案,但新開發務必採用 PDO/MySQLi + 預處理語句,確保安全與相容性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved