php实现搜索
PHP实现搜索功能的方法
数据库搜索
使用SQL的LIKE语句进行模糊查询,适用于小型项目或简单搜索需求。示例代码展示了如何连接数据库并执行搜索查询。
$keyword = $_GET['keyword'];
$conn = new mysqli("localhost", "username", "password", "database");
$sql = "SELECT * FROM products WHERE name LIKE '%$keyword%'";
$result = $conn->query($sql);
全文检索
对于更高效的搜索,可以使用MySQL的FULLTEXT索引。需要在表中创建FULLTEXT索引后执行MATCH AGAINST查询。
$sql = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST('$keyword')";
使用搜索引擎
对于大型项目,集成Elasticsearch或Algolia等专业搜索引擎能提供更好的性能和功能。需要安装对应SDK并配置连接。
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'products',
'body' => [
'query' => [
'match' => [
'name' => $keyword
]
]
]
];
$response = $client->search($params);
前端实现
结合AJAX实现实时搜索效果,提升用户体验。示例展示了如何使用jQuery发送搜索请求并显示结果。
$('#search-input').keyup(function(){
$.post('search.php', {keyword: $(this).val()}, function(data){
$('#results').html(data);
});
});
安全注意事项
必须对用户输入进行过滤和转义,防止SQL注入攻击。推荐使用预处理语句。
$stmt = $conn->prepare("SELECT * FROM products WHERE name LIKE ?");
$searchTerm = "%$keyword%";
$stmt->bind_param("s", $searchTerm);
$stmt->execute();
性能优化
对于大型数据集,考虑添加搜索缓存机制。可以使用Redis或Memcached存储常用搜索结果,减少数据库压力。

$cache = new Redis();
$cache->connect('127.0.0.1', 6379);
if(!$result = $cache->get("search:$keyword")) {
// 执行数据库查询
$cache->set("search:$keyword", serialize($result), 3600);
}






