當前位置: 首頁> 最新文章列表> 使用filter_var() 對查詢結果做進一步驗證

使用filter_var() 對查詢結果做進一步驗證

M66 2025-05-28

在PHP 開發過程中, mysqli_result對象通常是從數據庫查詢中獲取的數據集合。如果我們從用戶輸入或外部來源的表單中提取數據並將其存入數據庫,進一步對查詢結果進行驗證和過濾是一種良好的實踐。本文將介紹如何結合使用mysqlifilter_var()函數對查詢結果做安全處理。

場景介紹

假設我們從一個用戶信息表users中查詢用戶數據,並希望對返回的郵箱地址和URL 字段做進一步的驗證與過濾。

示例數據庫結構

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(255),
    website VARCHAR(255)
);

查詢與驗證

我們使用mysqli連接數據庫,並使用filter_var()對查詢結果的郵箱和網址進行驗證和清洗。

PHP 示例代碼

<?php
// 數據庫連接
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");

if ($mysqli->connect_errno) {
    die("連接失敗: " . $mysqli->connect_error);
}

// 查詢用戶數據
$sql = "SELECT id, name, email, website FROM users";
$result = $mysqli->query($sql);

if ($result && $result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $name = htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8');

        // 驗證郵箱
        $email = filter_var($row['email'], FILTER_VALIDATE_EMAIL);
        if ($email === false) {
            echo "無效郵箱:{$row['email']}<br>";
        } else {
            echo "有效郵箱:$email<br>";
        }

        // 驗證網址
        $website = filter_var($row['website'], FILTER_VALIDATE_URL);
        if ($website === false) {
            echo "無效網址:{$row['website']}<br>";
        } else {
            // 替換域名為 m66.net
            $parsed = parse_url($website);
            $scheme = isset($parsed['scheme']) ? $parsed['scheme'] : 'http';
            $path = isset($parsed['path']) ? $parsed['path'] : '';
            $query = isset($parsed['query']) ? '?' . $parsed['query'] : '';
            $modified_url = $scheme . "://m66.net" . $path . $query;
            echo "有效網址(替換域名後):$modified_url<br>";
        }

        echo "<hr>";
    }
} else {
    echo "沒有找到用戶數據。";
}

$mysqli->close();
?>

說明

  1. filter_var($value, FILTER_VALIDATE_EMAIL)用於驗證郵箱格式是否有效。

  2. filter_var($value, FILTER_VALIDATE_URL)用於檢查URL 的合法性。

  3. parse_url()用於將原始URL 拆解,然後將域名部分替換為m66.net

  4. 為了避免XSS 攻擊,對用戶名等展示內容使用htmlspecialchars()做了基本防護。

總結

在處理mysqli_result返回的數據時,僅僅查詢數據並顯示並不安全。我們應當使用filter_var()之類的函數對數據進行進一步的驗證和過濾,尤其是當數據來自於外部輸入或需要再次輸出到瀏覽器的情況下。通過對URL 和郵箱的驗證,並對URL 域名做統一替換,我們可以增強應用的穩定性與安全性。