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

PHP 依 URL 參數查詢 MySQL 資料庫記錄實作教學

     編輯:PHP 相關知識

前言

透過 URL 參數 (GET) 從資料庫查詢特定記錄,是動態網頁的基礎應用。本文示範安全的參數處理、資料庫查詢與結果顯示,適用於新聞詳情、使用者檔案、商品頁面等情境。

資料庫結構

CREATE TABLE `users` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `city` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

安全查詢實作 (PDO 版)

<?php
// 資料庫設定
$dbHost = 'localhost';
$dbUser = 'root';
$dbPass = 'admin';
$dbName = 'test';

try {
    $pdo = new PDO(
        "mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4",
        $dbUser,
        $dbPass,
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );
} catch (PDOException $e) {
    die("資料庫連線失敗:" . $e->getMessage());
}

// 1. 取得並驗證參數
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1]
]);

if ($id === false || $id === null) {
    die('無效的 ID 參數');
}

// 2. 使用預備語句查詢
$sql = "SELECT id, name, city FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':id' => $id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// 3. 處理結果
if ($user) {
    echo '<pre>';
    print_r($user);
    echo '</pre>';
} else {
    echo '查無此記錄 (ID: ' . htmlspecialchars($id) . ')';
}

// 4. 提供測試連結
echo '<p><a href="?id=2">查詢 ID=2 的記錄</a></p>';
?>

關鍵安全機制解析

技術作用風險若未使用
filter_input() + FILTER_VALIDATE_INT嚴格驗證參數為正整數SQL 注入、型別混淆攻擊
PDO 預備語句參數化查詢,資料與程式碼分離SQL 注入、資料竄改
htmlspecialchars()輸出編碼防止 XSS跨站腳本攻擊
例外錯誤模式統一錯誤處理,避免敏感資訊洩露資訊洩露、除錯困難

進階應用:多參數查詢與分頁

<?php
// 多條件查詢範例
$conditions = [];
$params = [];

if (!empty($_GET['name'])) {
    $conditions[] = "name LIKE :name";
    $params[':name'] = "%{$_GET['name']}%";
}

if (!empty($_GET['city'])) {
    $conditions[] = "city = :city";
    $params[':city'] = $_GET['city'];
}

$where = $conditions ? 'WHERE ' . implode(' AND ', $conditions) : '';
$sql = "SELECT * FROM users $where ORDER BY id DESC";

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 顯示結果...
?>

常見錯誤與最佳實踐

  • 不要直接使用 $_GET['id']:必須經過驗證與過濾
  • 避免在 SQL 中拼接變數:永遠使用預備語句
  • 處理「查無資料」情況:給予友善提示而非空白頁面
  • 記錄查詢日誌:生產環境應記錄慢查詢與錯誤查詢
  • 考慮快取機制:高流量頁面可使用 Redis/Memcached 快取查詢結果

總結

透過 URL 參數查詢資料庫是 Web 開發的核心技能。掌握參數驗證、預備語句、錯誤處理三大支柱,能建立安全、穩定的動態查詢功能。建議進一步學習資料庫索引最佳化與查詢快取策略。

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