当前位置:首页 > 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中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…