答案:本文介绍如何用PHP实现站内搜索功能,涵盖表单设计、关键词处理、数据库模糊查询、结果展示及安全优化。1. 使用GET方法提交搜索表单;2. 在search.php中获取并过滤关键词,防止空值或过短输入;3. 通过PDO预处理执行LIKE查询,防止SQL注入;4. 展示结果时高亮关键词并转义输出,防XSS;5. 建议添加输入验证、索引优化、分页和中文分词以提升性能与安全。

站内搜索是大多数网站必备的功能之一,PHP作为服务端脚本语言,可以轻松实现基于数据库的关键词检索功能。本文将介绍如何使用PHP实现一个简单高效的站内搜索功能,涵盖表单提交、SQL查询、结果展示及安全防护等关键环节。
1. 搜索表单设计
用户通过HTML表单输入关键词,提交到处理脚本。表单建议使用GET方法,便于分享搜索链接。
2. 接收并处理搜索关键词
在 search.php 中获取 keyword 参数,并进行基本过滤,防止空值或过短输入。
$keyword = trim($_GET['keyword'] ?? '');
if (empty($keyword) || strlen($keyword) < 2) {
echo "请输入有效的关键词";
exit;
}
3. 执行数据库模糊查询
使用 MySQLi 或 PDO 连接数据库,对目标字段(如标题、内容)进行 LIKE 匹配。推荐使用 PDO 预处理语句防止 SQL 注入。
立即学习“PHP免费学习笔记(深入)”;
try {
$pdo = new PDO("mysql:host=localhost;dbname=your_db", "username", "password");
$stmt = $pdo->prepare("SELECT id, title, content, created_time
FROM articles
WHERE title LIKE ? OR content LIKE ?
ORDER BY created_time DESC");
$searchTerm = "%{$keyword}%";
$stmt->execute([$searchTerm, $searchTerm]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("数据库错误:" . $e->getMessage());
}
4. 展示搜索结果
遍历查询结果,输出匹配内容。可对关键词高亮显示,提升用户体验。
function highlight($text, $word) {
return str_ireplace($word, "$word", $text);
}
if (count($results) > 0) {
echo "共找到 " . count($results) . " 条结果:
";
foreach ($results as $row) {
echo "" . htmlspecialchars(highlight($row['title'], $keyword)) . "
";
echo "" . htmlspecialchars(mb_substr(highlight($row['content'], $keyword), 0, 150)) . "...
";
echo "发布时间:" . $row['created_time'] . "
";
}
} else {
echo "未找到相关结果。";
}
5. 安全与性能优化建议
为保障系统稳定与安全,需注意以下几点:
- 过滤输入:始终对用户输入进行 trim 和长度验证
- 防止注入:优先使用预处理语句,避免拼接 SQL
- XSS防护:输出内容使用 htmlspecialchars 转义
- 索引优化:为 title、content 等搜索字段建立数据库索引
- 分页处理:结果较多时添加 LIMIT 和分页逻辑
- 中文分词:如需更精准搜索,可集成 Sphinx、Elasticsearch 或使用 PHP 分词扩展











