当前位置:首页 > PHP

php实现搜索检索实现

2026-01-30 01:26:54PHP

PHP 实现搜索检索功能

基础数据库查询搜索

使用 SQL 的 LIKE 语句实现简单搜索功能,适用于小型网站或基础需求。

$searchTerm = $_GET['search_term'];
$query = "SELECT * FROM products WHERE name LIKE '%$searchTerm%' OR description LIKE '%$searchTerm%'";
$result = mysqli_query($connection, $query);

使用预处理语句防止 SQL 注入

为了安全性,应该使用预处理语句来处理用户输入。

$searchTerm = $_GET['search_term'];
$stmt = $connection->prepare("SELECT * FROM products WHERE name LIKE ? OR description LIKE ?");
$searchParam = "%$searchTerm%";
$stmt->bind_param("ss", $searchParam, $searchParam);
$stmt->execute();
$result = $stmt->get_result();

全文索引搜索

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

$searchTerm = $_GET['search_term'];
$query = "SELECT * FROM products WHERE MATCH(name, description) AGAINST(? IN BOOLEAN MODE)";
$stmt = $connection->prepare($query);
$stmt->bind_param("s", $searchTerm);
$stmt->execute();
$result = $stmt->get_result();

使用 Elasticsearch 实现高级搜索

对于大型应用,集成 Elasticsearch 能提供更强大的搜索功能。

php实现搜索检索实现

require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();

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

$response = $client->search($params);

实现分页功能

在搜索结果较多时,添加分页功能提升用户体验。

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;

$query = "SELECT * FROM products WHERE name LIKE ? LIMIT $perPage OFFSET $offset";
$stmt = $connection->prepare($query);
$searchParam = "%$searchTerm%";
$stmt->bind_param("s", $searchParam);
$stmt->execute();
$result = $stmt->get_result();

搜索结果高亮显示

在返回结果中高亮显示匹配的关键词。

php实现搜索检索实现

function highlightKeywords($text, $keyword) {
    return preg_replace("/(" . preg_quote($keyword, '/') . ")/i", "<span class='highlight'>$1</span>", $text);
}

while ($row = $result->fetch_assoc()) {
    echo highlightKeywords($row['name'], $searchTerm);
    echo highlightKeywords($row['description'], $searchTerm);
}

实现自动补全功能

使用 AJAX 实现搜索框自动补全功能。

// autocomplete.php
$term = $_GET['term'];
$query = "SELECT name FROM products WHERE name LIKE ? LIMIT 5";
$stmt = $connection->prepare($query);
$searchParam = "$term%";
$stmt->bind_param("s", $searchParam);
$stmt->execute();
$result = $stmt->get_result();

$suggestions = [];
while ($row = $result->fetch_assoc()) {
    $suggestions[] = $row['name'];
}

echo json_encode($suggestions);

搜索日志记录

记录用户搜索行为以便分析。

$searchTerm = $_GET['search_term'];
$ip = $_SERVER['REMOTE_ADDR'];
$timestamp = date('Y-m-d H:i:s');

$stmt = $connection->prepare("INSERT INTO search_logs (term, ip_address, created_at) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $searchTerm, $ip, $timestamp);
$stmt->execute();

多条件筛选搜索

实现结合多个条件的复合搜索功能。

$conditions = [];
$params = [];
$types = "";

if (!empty($_GET['search_term'])) {
    $conditions[] = "name LIKE ?";
    $params[] = "%" . $_GET['search_term'] . "%";
    $types .= "s";
}

if (!empty($_GET['category'])) {
    $conditions[] = "category_id = ?";
    $params[] = $_GET['category'];
    $types .= "i";
}

$query = "SELECT * FROM products";
if (!empty($conditions)) {
    $query .= " WHERE " . implode(" AND ", $conditions);
}

$stmt = $connection->prepare($query);
if (!empty($params)) {
    $stmt->bind_param($types, ...$params);
}
$stmt->execute();
$result = $stmt->get_result();

这些方法涵盖了从基础到高级的 PHP 搜索实现方案,可以根据项目需求选择合适的实现方式。对于小型项目,简单的数据库查询即可满足需求;对于大型项目,建议考虑使用专门的搜索引擎如 Elasticsearch。

标签: php
分享给朋友:

相关文章

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…