PHP实现数据搜索
PHP实现数据搜索的方法
使用MySQL LIKE语句
在PHP中可以通过MySQL的LIKE语句实现基础搜索功能。建立数据库连接后,使用预处理语句防止SQL注入。
$searchTerm = $_GET['search'];
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE :search");
$stmt->bindValue(':search', '%'.$searchTerm.'%');
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
全文索引搜索
对于大量文本数据,MySQL的FULLTEXT索引更高效。需要在表中创建FULLTEXT索引后使用MATCH AGAINST语法。

$stmt = $pdo->prepare("SELECT * FROM articles WHERE MATCH(title, content) AGAINST(:search IN NATURAL LANGUAGE MODE)");
$stmt->execute([':search' => $searchTerm]);
使用Elasticsearch
对于大型应用,可以集成Elasticsearch实现高性能搜索。需要安装Elasticsearch PHP客户端。
$client = ClientBuilder::create()->build();
$params = [
'index' => 'products',
'body' => [
'query' => [
'multi_match' => [
'query' => $searchTerm,
'fields' => ['name', 'description']
]
]
]
];
$response = $client->search($params);
前端AJAX实时搜索
结合jQuery实现实时搜索效果,减少页面刷新。

$('#search-input').keyup(function(){
$.post('search.php', {query: $(this).val()}, function(data){
$('#results').html(data);
});
});
搜索结果分页
大数据集搜索结果需要分页处理,计算总页数和当前页数据。
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM products WHERE name LIKE :search LIMIT :offset, :perPage");
$stmt->bindValue(':search', '%'.$searchTerm.'%');
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$total = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
$totalPages = ceil($total / $perPage);
搜索结果高亮显示
在输出搜索结果时,使用str_replace高亮匹配关键词。
foreach($results as $result){
$highlighted = str_ireplace($searchTerm, "<span class='highlight'>$searchTerm</span>", $result['name']);
echo "<div>$highlighted</div>";
}






