当前位置:首页 > 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存储临时搜索记录

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

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>";
}

高级功能实现

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

// 获取热门搜索
$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
分享给朋友:

相关文章

PHP实现会员管理

PHP实现会员管理

PHP实现会员管理的方法 数据库设计 创建会员表(members)包含字段:id(主键)、username、password(建议加密存储)、email、register_time、last_logi…

PHP审核流程实现

PHP审核流程实现

PHP审核流程实现方法 审核流程的实现通常涉及状态管理、权限控制和操作记录。以下是几种常见的实现方式: 状态机模式 定义审核状态常量,使用状态机控制流程流转: const STATUS_PENDI…

域名转短域名PHP实现

域名转短域名PHP实现

短域名服务的基本原理 短域名服务通过将长URL映射到更短的唯一字符串实现跳转。核心步骤包括生成短码、存储原始URL与短码的对应关系、通过短码重定向到原始URL。 生成短码的常见方法 Base62编码…

PHP实现elm

PHP实现elm

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

mvc实现 PHP

mvc实现 PHP

MVC 模式概述 MVC(Model-View-Controller)是一种设计模式,用于将应用程序的逻辑分离为三个核心组件:模型(Model)处理数据,视图(View)负责展示,控制器(Contro…

PHP实现OCR

PHP实现OCR

PHP实现OCR的方法 使用PHP实现OCR(光学字符识别)可以通过多种方式完成,以下为几种常见方法: 使用Tesseract OCR Tesseract是一个开源的OCR引擎,支持多种语言。可以…