php 实现搜索
PHP 实现搜索功能
在 PHP 中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式:

数据库全文搜索
$searchTerm = $_GET['search'] ?? '';
$query = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST(:search IN NATURAL LANGUAGE MODE)";
$stmt = $pdo->prepare($query);
$stmt->execute([':search' => $searchTerm]);
$results = $stmt->fetchAll();
LIKE 模糊搜索
$searchTerm = '%' . $_GET['search'] . '%';
$query = "SELECT * FROM products WHERE name LIKE :search OR description LIKE :search";
$stmt = $pdo->prepare($query);
$stmt->execute([':search' => $searchTerm]);
使用 Elasticsearch
对于大型项目,可以集成 Elasticsearch:

$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'products',
'body' => [
'query' => [
'match' => [
'name' => $_GET['search']
]
]
]
];
$response = $client->search($params);
AJAX 实时搜索
前端配合 AJAX 实现实时搜索:
// JavaScript 部分
document.getElementById('search').addEventListener('keyup', function() {
fetch('search.php?q=' + this.value)
.then(response => response.json())
.then(data => updateResults(data));
});
// search.php
header('Content-Type: application/json');
echo json_encode($searchResults);
安全注意事项
// 始终对用户输入进行清理
$searchTerm = filter_var($_GET['search'], FILTER_SANITIZE_STRING);
// 使用预处理语句防止 SQL 注入
$stmt = $pdo->prepare("...");
高级搜索功能
实现多条件搜索:
$filters = [];
if (!empty($_GET['category'])) {
$filters[] = "category_id = " . (int)$_GET['category'];
}
if (!empty($_GET['price_min'])) {
$filters[] = "price >= " . (float)$_GET['price_min'];
}
$where = $filters ? 'WHERE ' . implode(' AND ', $filters) : '';
$query = "SELECT * FROM products $where";
搜索结果分页
$page = max(1, (int)$_GET['page'] ?? 1);
$perPage = 10;
$offset = ($page - 1) * $perPage;
$query = "SELECT * FROM products WHERE ... LIMIT $offset, $perPage";






