当前位置:首页 > PHP

PHP实现搜索记录

2026-02-15 10:27:43PHP

实现搜索记录功能

在PHP中实现搜索记录功能可以通过多种方式完成,包括使用数据库存储、Session或Cookie保存临时记录。以下是几种常见方法:

使用数据库存储搜索记录

创建数据库表存储用户的搜索记录,适合需要长期保存的场景:

CREATE TABLE search_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    keyword VARCHAR(255),
    search_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

PHP代码示例:

// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

// 获取搜索关键词
$keyword = $_GET['keyword'] ?? '';

if (!empty($keyword)) {
    $stmt = $pdo->prepare("INSERT INTO search_history (user_id, keyword) VALUES (:user_id, :keyword)");
    $stmt->bindParam(':user_id', $_SESSION['user_id']);
    $stmt->bindParam(':keyword', $keyword);
    $stmt->execute();
}

使用Session存储临时搜索记录

适合不需要持久化存储的场景:

PHP实现搜索记录

session_start();

if (!empty($_GET['keyword'])) {
    if (!isset($_SESSION['search_history'])) {
        $_SESSION['search_history'] = [];
    }

    // 限制记录数量
    if (count($_SESSION['search_history']) >= 10) {
        array_shift($_SESSION['search_history']);
    }

    $_SESSION['search_history'][] = [
        'keyword' => $_GET['keyword'],
        'time' => time()
    ];
}

使用Cookie存储客户端搜索记录

适合简单的客户端存储:

if (!empty($_GET['keyword'])) {
    $history = isset($_COOKIE['search_history']) ? json_decode($_COOKIE['search_history'], true) : [];

    // 去重
    if (!in_array($_GET['keyword'], $history)) {
        $history[] = $_GET['keyword'];

        // 限制记录数量
        if (count($history) > 5) {
            array_shift($history);
        }

        setcookie('search_history', json_encode($history), time() + 86400 * 30, '/');
    }
}

显示搜索记录

从数据库获取并显示:

$stmt = $pdo->prepare("SELECT keyword FROM search_history WHERE user_id = :user_id ORDER BY search_time DESC LIMIT 10");
$stmt->bindParam(':user_id', $_SESSION['user_id']);
$stmt->execute();
$history = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($history as $item) {
    echo htmlspecialchars($item['keyword']) . "<br>";
}

高级功能实现

实现热门搜索和搜索建议:

PHP实现搜索记录

// 获取热门搜索
$stmt = $pdo->query("SELECT keyword, COUNT(*) as count FROM search_history GROUP BY keyword ORDER BY count DESC LIMIT 5");
$popular = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 搜索建议
$stmt = $pdo->prepare("SELECT DISTINCT keyword FROM search_history WHERE keyword LIKE :query LIMIT 5");
$stmt->bindValue(':query', $_GET['q'] . '%');
$stmt->execute();
$suggestions = $stmt->fetchAll(PDO::FETCH_COLUMN);

安全注意事项

  1. 对用户输入进行过滤和转义:

    $keyword = filter_input(INPUT_GET, 'keyword', FILTER_SANITIZE_STRING);
  2. 防止SQL注入:

    $stmt = $pdo->prepare("INSERT ...");
    $stmt->bindParam(':keyword', $keyword);
  3. 限制搜索频率:

    if (isset($_SESSION['last_search']) && time() - $_SESSION['last_search'] < 2) {
     die('搜索太频繁,请稍后再试');
    }
    $_SESSION['last_search'] = time();

通过以上方法可以灵活实现PHP搜索记录功能,根据实际需求选择适合的存储方式。

标签: PHP
分享给朋友:

相关文章

PHP实现elm

PHP实现elm

PHP实现ELM(极限学习机) ELM(Extreme Learning Machine)是一种单隐层前馈神经网络算法,具有训练速度快、泛化性能好的特点。以下是PHP实现ELM的关键步骤和代码示例。…

PHP实现excel

PHP实现excel

PHP 实现 Excel 操作 读取 Excel 文件 使用 PHP 读取 Excel 文件可以通过 PhpSpreadsheet 库实现。安装该库可以通过 Composer: composer r…

PHP实现自举

PHP实现自举

PHP实现自举的方法 自举(Bootstrap)在PHP中通常指通过自身代码生成或构建更复杂的系统。以下是几种常见的PHP自举实现方式: 动态类加载与自动注册 利用spl_autoload_regi…

PHP实现预约

PHP实现预约

PHP预约系统实现方法 创建预约系统需要处理用户输入、数据存储和验证。以下是一个基本的PHP预约系统实现框架: 数据库表结构 CREATE TABLE appointments ( id…

PHP实现wol

PHP实现wol

PHP实现WOL(Wake-on-LAN)功能 WOL(Wake-on-LAN)是一种通过网络唤醒处于休眠或关机状态计算机的技术。以下是使用PHP实现WOL功能的详细方法: 发送魔术包的基本原理 W…

PHP实现医院

PHP实现医院

PHP实现医院管理系统 医院管理系统通常包含患者管理、医生排班、药品库存、预约挂号等功能。以下是使用PHP实现医院管理系统的关键步骤和代码示例。 数据库设计 创建数据库表结构是系统的基础。主要表包括…