php搜索功能的实现
实现基础搜索功能
使用SQL的LIKE语句进行简单关键词匹配,适用于小型数据库或低流量场景。示例代码展示如何连接数据库并执行搜索查询。
$keyword = $_GET['keyword'];
$conn = new mysqli("localhost", "username", "password", "database");
$sql = "SELECT * FROM products WHERE name LIKE '%".$conn->real_escape_string($keyword)."%'";
$result = $conn->query($sql);
使用全文索引优化性能
对于MySQL数据库,在相关字段上创建FULLTEXT索引能显著提高搜索效率。需要修改表结构并采用MATCH AGAINST语法。

// 建表时添加全文索引
ALTER TABLE products ADD FULLTEXT(name, description);
// PHP查询代码
$sql = "SELECT * FROM products WHERE MATCH(name, description) AGAINST('".$conn->real_escape_string($keyword)."')";
实现分页功能
大数据量搜索结果需要分页显示,通过LIMIT和OFFSET参数控制每页显示数量。计算总页数提供完整分页导航。
$per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $per_page;
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM products
WHERE MATCH(name, description) AGAINST('$keyword')
LIMIT $offset, $per_page";
$total_results = $conn->query("SELECT FOUND_ROWS()")->fetch_row()[0];
$total_pages = ceil($total_results / $per_page);
添加高级搜索选项
扩展基础搜索功能,允许用户组合多个条件进行精确查询。构建动态SQL语句时需注意安全过滤。

$conditions = [];
if(!empty($_GET['keyword'])) {
$conditions[] = "MATCH(name,description) AGAINST('".$conn->real_escape_string($_GET['keyword'])."')";
}
if(!empty($_GET['category'])) {
$conditions[] = "category_id = ".(int)$_GET['category'];
}
if(!empty($_GET['price_min'])) {
$conditions[] = "price >= ".(float)$_GET['price_min'];
}
$sql = "SELECT * FROM products";
if(count($conditions) > 0) {
$sql .= " WHERE ".implode(" AND ", $conditions);
}
搜索结果高亮显示
使用PHP字符串函数对结果中的关键词进行标记,增强用户体验。注意HTML特殊字符的转义处理。
function highlight_keyword($text, $keyword) {
if(empty($keyword)) return htmlspecialchars($text);
return preg_replace(
"/(".$keyword.")/i",
'<span class="highlight">$1</span>',
htmlspecialchars($text)
);
}
实现搜索建议功能
通过AJAX请求获取搜索建议,快速响应用户输入。数据库查询使用LIKE配合LIMIT返回有限结果。
// suggest.php
$term = $_GET['term'];
$sql = "SELECT name FROM products WHERE name LIKE '%".$conn->real_escape_string($term)."%' LIMIT 5";
$result = $conn->query($sql);
$suggestions = [];
while($row = $result->fetch_assoc()) {
$suggestions[] = $row['name'];
}
echo json_encode($suggestions);






