当前位置:首页 > PHP

php实现搜索实例

2026-03-13 10:52:37PHP

PHP实现搜索功能的方法

数据库搜索实现

使用SQL的LIKE语句实现基础搜索功能。假设有一个名为products的表,包含namedescription字段。

$searchTerm = $_GET['search'] ?? '';
$searchTerm = '%' . $searchTerm . '%';

$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE :search OR description LIKE :search");
$stmt->bindParam(':search', $searchTerm);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

全文索引搜索

对于更高效的搜索,可以在MySQL表上创建全文索引:

ALTER TABLE products ADD FULLTEXT(name, description);

PHP中使用MATCH AGAINST语法:

php实现搜索实例

$searchTerm = $_GET['search'] ?? '';
$stmt = $pdo->prepare("SELECT * FROM products WHERE MATCH(name, description) AGAINST(:search IN NATURAL LANGUAGE MODE)");
$stmt->bindParam(':search', $searchTerm);
$stmt->execute();

分页实现

搜索结果通常需要分页显示:

$page = $_GET['page'] ?? 1;
$perPage = 10;
$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();

$totalResults = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
$totalPages = ceil($totalResults / $perPage);

高级搜索功能

实现多条件筛选搜索:

php实现搜索实例

$filters = [
    'category' => $_GET['category'] ?? null,
    'price_min' => $_GET['price_min'] ?? null,
    'price_max' => $_GET['price_max'] ?? null
];

$where = [];
$params = [];

if (!empty($searchTerm)) {
    $where[] = "name LIKE :search";
    $params[':search'] = '%'.$searchTerm.'%';
}

if (!empty($filters['category'])) {
    $where[] = "category_id = :category";
    $params[':category'] = $filters['category'];
}

// 构建查询
$sql = "SELECT * FROM products";
if (!empty($where)) {
    $sql .= " WHERE " . implode(' AND ', $where);
}

使用搜索引擎

对于大型应用,可以考虑集成Elasticsearch或Algolia等专业搜索引擎:

// Elasticsearch示例
$client = Elastic\Elasticsearch\ClientBuilder::create()->build();

$params = [
    'index' => 'products',
    'body' => [
        'query' => [
            'multi_match' => [
                'query' => $searchTerm,
                'fields' => ['name^3', 'description']
            ]
        ]
    ]
];

$response = $client->search($params);
$results = $response['hits']['hits'];

前端搜索建议

实现搜索框自动补全功能:

// 使用jQuery实现
$('#search-input').on('input', function() {
    $.get('/search/suggest', {query: $(this).val()}, function(data) {
        // 显示建议结果
    });
});

后端PHP处理建议请求:

$query = $_GET['query'] ?? '';
$stmt = $pdo->prepare("SELECT name FROM products WHERE name LIKE :query LIMIT 5");
$stmt->bindValue(':query', '%'.$query.'%');
$stmt->execute();
$suggestions = $stmt->fetchAll(PDO::FETCH_COLUMN);

header('Content-Type: application/json');
echo json_encode($suggestions);

标签: 实例php
分享给朋友:

相关文章

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php实现短信验证

php实现短信验证

PHP实现短信验证的步骤 选择合适的短信服务提供商 国内常见的短信服务提供商包括阿里云短信、腾讯云短信、云片等。注册账号并获取API密钥和签名模板是第一步。这些平台通常提供详细的开发文档和SDK。…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…