当前位置:首页 > PHP

网站php实现检索

2026-02-16 04:12:51PHP

PHP实现网站检索功能

数据库准备

创建包含搜索内容的数据库表,例如文章表:

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    content TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

基础搜索实现

使用MySQL的LIKE语句实现基础搜索:

$searchTerm = $_GET['q'] ?? '';
$results = [];

if (!empty($searchTerm)) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
    $stmt = $pdo->prepare("SELECT * FROM articles 
                          WHERE title LIKE :term OR content LIKE :term");
    $stmt->execute([':term' => "%$searchTerm%"]);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

全文索引优化

对于大量数据,使用MySQL全文索引提高效率:

ALTER TABLE articles ADD FULLTEXT(title, content);
$stmt = $pdo->prepare("SELECT * FROM articles 
                      WHERE MATCH(title, content) AGAINST(:term IN NATURAL LANGUAGE MODE)");
$stmt->execute([':term' => $searchTerm]);

分页处理

添加分页功能避免结果过多:

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

$stmt = $pdo->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM articles 
                      WHERE MATCH(title, content) AGAINST(:term)
                      LIMIT $offset, $perPage");
$stmt->execute([':term' => $searchTerm]);

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

结果高亮显示

在搜索结果中高亮显示匹配关键词:

function highlight($text, $words) {
    $words = preg_replace('/\s+/', '|', preg_quote($words));
    return preg_replace("/($words)/i", '<span class="highlight">$1</span>', $text);
}

高级搜索选项

添加搜索过滤条件:

$category = $_GET['category'] ?? '';
$dateFrom = $_GET['date_from'] ?? '';
$dateTo = $_GET['date_to'] ?? '';

$query = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST(:term)";
$params = [':term' => $searchTerm];

if (!empty($category)) {
    $query .= " AND category_id = :category";
    $params[':category'] = $category;
}

if (!empty($dateFrom) && !empty($dateTo)) {
    $query .= " AND created_at BETWEEN :date_from AND :date_to";
    $params[':date_from'] = $dateFrom;
    $params[':date_to'] = $dateTo;
}

使用搜索引擎扩展

对于大型网站,考虑使用Elasticsearch或Algolia等专业搜索服务:

// Elasticsearch示例
$client = Elastic\Elasticsearch\ClientBuilder::create()
    ->setHosts(['localhost:9200'])
    ->build();

$params = [
    'index' => 'articles',
    'body' => [
        'query' => [
            'multi_match' => [
                'query' => $searchTerm,
                'fields' => ['title^3', 'content']
            ]
        ]
    ]
];

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

安全注意事项

防止SQL注入和其他安全风险:

网站php实现检索

$searchTerm = trim(strip_tags($_GET['q'] ?? ''));
$searchTerm = substr($searchTerm, 0, 100); // 限制输入长度

性能优化建议

  • 为搜索字段创建适当索引
  • 考虑实现搜索缓存
  • 对搜索结果使用延迟加载
  • 实现自动完成/搜索建议功能

标签: 网站php
分享给朋友:

相关文章

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php多态实现

php多态实现

PHP 多态的实现方法 多态是面向对象编程的三大特性之一,允许不同类的对象对同一消息做出响应。PHP 主要通过以下方式实现多态: 通过继承和方法重写 子类继承父类并重写父类方法,实现不同子类对同一方…

php实现批量删除

php实现批量删除

PHP 实现批量删除的方法 表单设计与前端交互 在 HTML 表单中使用复选框(checkbox)让用户选择要删除的项。每个复选框的 name 属性设置为数组形式(如 items[]),以便 PHP…

php实现记住密码

php实现记住密码

实现记住密码功能的方法 使用PHP实现记住密码功能通常需要结合Cookie和Session技术。以下是几种常见的实现方式: 使用Cookie存储登录信息 在用户登录时创建一个长期有效的Cookie来…