PHP实现搜索记录
实现搜索记录功能
在PHP中实现搜索记录功能通常涉及将用户的搜索关键词存储到数据库或缓存中,并在需要时展示给用户。以下是具体实现方法:
数据库表设计
创建一个用于存储搜索记录的表:
CREATE TABLE search_history (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
keyword VARCHAR(255),
search_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
存储搜索记录
当用户执行搜索时,将关键词插入数据库:

function saveSearchHistory($userId, $keyword) {
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $db->prepare("INSERT INTO search_history (user_id, keyword) VALUES (?, ?)");
$stmt->execute([$userId, $keyword]);
}
获取搜索记录
显示用户最近的搜索记录:
function getSearchHistory($userId, $limit = 5) {
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $db->prepare("SELECT keyword FROM search_history WHERE user_id = ? ORDER BY search_time DESC LIMIT ?");
$stmt->execute([$userId, $limit]);
return $stmt->fetchAll(PDO::FETCH_COLUMN);
}
使用Session存储临时记录
对于未登录用户,可以使用Session临时存储搜索记录:

session_start();
if (!isset($_SESSION['search_history'])) {
$_SESSION['search_history'] = [];
}
// 添加新搜索
array_unshift($_SESSION['search_history'], $_GET['q']);
$_SESSION['search_history'] = array_slice(array_unique($_SESSION['search_history']), 0, 5);
前端展示搜索记录
在搜索结果页或搜索框下方显示历史记录:
<div class="search-history">
<h3>最近搜索</h3>
<ul>
<?php foreach(getSearchHistory($currentUserId) as $keyword): ?>
<li><a href="/search?q=<?= urlencode($keyword) ?>"><?= htmlspecialchars($keyword) ?></a></li>
<?php endforeach; ?>
</ul>
</div>
定期清理旧记录
设置定时任务清理超过一定时间的记录:
function cleanOldSearchHistory($days = 30) {
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $db->prepare("DELETE FROM search_history WHERE search_time < DATE_SUB(NOW(), INTERVAL ? DAY)");
$stmt->execute([$days]);
}
安全注意事项
对所有用户输入进行过滤和转义:
$keyword = filter_input(INPUT_GET, 'q', FILTER_SANITIZE_STRING);
以上方法可以根据实际需求进行组合或调整,例如添加搜索次数统计、热门搜索推荐等功能。






