php实现站内搜索
PHP实现站内搜索的方法
使用MySQL的LIKE语句进行简单搜索 在PHP中可以通过MySQL的LIKE语句实现基础搜索功能。创建一个搜索表单,将用户输入的关键词与数据库中的内容进行匹配。
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 获取搜索关键词
$keyword = $_GET['keyword'];
// 执行查询
$sql = "SELECT * FROM articles WHERE title LIKE '%$keyword%' OR content LIKE '%$keyword%'";
$result = $conn->query($sql);
// 显示结果
while($row = $result->fetch_assoc()) {
echo "<h3>".$row['title']."</h3>";
echo "<p>".$row['content']."</p>";
}
使用全文索引提高搜索效率 MySQL的全文索引(FULLTEXT)可以提供更高效的搜索体验,特别是在处理大量数据时。

// 创建全文索引(只需执行一次)
ALTER TABLE articles ADD FULLTEXT(title, content);
// 使用全文索引搜索
$sql = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST('$keyword')";
实现分页功能 对于大量搜索结果,添加分页功能可以提升用户体验。
// 获取当前页码
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$start = ($page - 1) * $perPage;
// 修改查询语句
$sql = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST('$keyword') LIMIT $start, $perPage";
// 计算总页数
$totalSql = "SELECT COUNT(*) as total FROM articles WHERE MATCH(title, content) AGAINST('$keyword')";
$totalResult = $conn->query($totalSql);
$total = $totalResult->fetch_assoc()['total'];
$pages = ceil($total / $perPage);
添加搜索建议功能 使用AJAX实现搜索建议功能,当用户输入时实时显示可能的搜索结果。

// JavaScript部分
document.getElementById('search').addEventListener('input', function() {
let keyword = this.value;
if(keyword.length > 2) {
fetch('suggest.php?keyword=' + keyword)
.then(response => response.json())
.then(data => {
// 显示建议结果
});
}
});
// suggest.php
$keyword = $_GET['keyword'];
$sql = "SELECT title FROM articles WHERE title LIKE '%$keyword%' LIMIT 5";
$result = $conn->query($sql);
$suggestions = [];
while($row = $result->fetch_assoc()) {
$suggestions[] = $row['title'];
}
echo json_encode($suggestions);
安全注意事项 防止SQL注入攻击是搜索功能实现中的重要环节。
// 使用预处理语句
$stmt = $conn->prepare("SELECT * FROM articles WHERE MATCH(title, content) AGAINST(?)");
$stmt->bind_param("s", $keyword);
$stmt->execute();
$result = $stmt->get_result();
优化搜索体验 添加搜索结果高亮显示功能,让用户更容易找到关键词。
function highlight($text, $words) {
$words = preg_replace('/\s+/', '|', $words);
return preg_replace("/($words)/i", '<span style="background-color:yellow">$1</span>', $text);
}
// 使用示例
echo highlight($row['content'], $keyword);






