php实现搜索查询功能实现
PHP实现搜索查询功能
数据库连接与准备
确保已建立数据库连接,使用PDO或mysqli扩展。创建包含搜索字段的数据表,例如products表包含name和description字段。
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
基础搜索实现
通过GET获取搜索关键词,使用SQL的LIKE语句进行模糊匹配。
$search = isset($_GET['search']) ? trim($_GET['search']) : '';
if (!empty($search)) {
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE :search OR description LIKE :search");
$stmt->execute([':search' => "%$search%"]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
分页处理
添加LIMIT和OFFSET实现分页,避免结果过多导致性能问题。
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE :search LIMIT $perPage OFFSET $offset");
安全防护
对用户输入进行转义和验证,防止SQL注入。使用预处理语句是更安全的方式。
$search = filter_var($search, FILTER_SANITIZE_STRING);
高级搜索功能
实现多字段组合搜索,可以通过构建动态SQL查询实现。
$conditions = [];
$params = [];
if (!empty($_GET['name'])) {
$conditions[] = "name LIKE :name";
$params[':name'] = '%' . $_GET['name'] . '%';
}
if (!empty($_GET['category'])) {
$conditions[] = "category_id = :category";
$params[':category'] = $_GET['category'];
}
$sql = "SELECT * FROM products";
if (!empty($conditions)) {
$sql .= " WHERE " . implode(" AND ", $conditions);
}
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
全文索引优化
对于大型数据库,考虑在MySQL中创建FULLTEXT索引提高搜索效率。
ALTER TABLE products ADD FULLTEXT(name, description);
使用MATCH AGAINST语法替换LIKE查询:
$stmt = $pdo->prepare("SELECT * FROM products WHERE MATCH(name, description) AGAINST(:search IN BOOLEAN MODE)");
结果展示
将搜索结果以友好方式展示给用户,包括分页导航和搜索关键词高亮。
foreach ($results as $row) {
echo '<div class="result">';
echo '<h3>' . str_ireplace($search, "<mark>$search</mark>", $row['name']) . '</h3>';
echo '<p>' . str_ireplace($search, "<mark>$search</mark>", $row['description']) . '</p>';
echo '</div>';
}
用户体验优化
添加搜索建议和自动完成功能,使用AJAX请求实现实时搜索建议。
// 前端jQuery示例
$('#search-input').on('input', function() {
$.get('suggest.php', {term: $(this).val()}, function(data) {
$('#suggestions').html(data);
});
});






