php搜索功能的实现
实现PHP搜索功能的方法
数据库搜索
使用SQL的LIKE语句进行模糊匹配,适用于简单的搜索需求。
$searchTerm = $_GET['search'];
$query = "SELECT * FROM products WHERE name LIKE '%$searchTerm%'";
$result = mysqli_query($connection, $query);
预处理语句防止SQL注入更安全:
$stmt = $connection->prepare("SELECT * FROM products WHERE name LIKE ?");
$searchTerm = "%{$_GET['search']}%";
$stmt->bind_param("s", $searchTerm);
$stmt->execute();
全文索引搜索
对于MySQL数据库,可以创建FULLTEXT索引提高搜索效率:
ALTER TABLE articles ADD FULLTEXT(title, content);
PHP中使用MATCH AGAINST语法:
$query = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST(?)";
使用搜索引擎
集成Elasticsearch等专业搜索引擎:
- 安装Elasticsearch PHP客户端
- 建立索引和映射
- 实现搜索功能
示例代码:
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'products',
'body' => [
'query' => [
'match' => [
'name' => $_GET['search']
]
]
]
];
$response = $client->search($params);
前端交互优化
添加AJAX实时搜索功能:
document.getElementById('search').addEventListener('input', function() {
fetch(`search.php?q=${this.value}`)
.then(response => response.json())
.then(data => updateResults(data));
});
搜索结果高亮显示
在PHP中处理搜索结果的高亮:
$highlighted = preg_replace("/$searchTerm/i", "<mark>$0</mark>", $result['title']);
分页处理
实现搜索结果分页:
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$query = "SELECT * FROM products WHERE name LIKE ? LIMIT $offset, $perPage";
多条件搜索
构建动态SQL查询:
$conditions = [];
$params = [];
if (!empty($_GET['name'])) {
$conditions[] = "name LIKE ?";
$params[] = '%'.$_GET['name'].'%';
}
if (!empty($_GET['category'])) {
$conditions[] = "category_id = ?";
$params[] = $_GET['category'];
}
$where = $conditions ? 'WHERE '.implode(' AND ', $conditions) : '';
$query = "SELECT * FROM products $where";





