当前位置:首页 > 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全文索引提高效率:

网站php实现检索

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);

结果高亮显示

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

网站php实现检索

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注入和其他安全风险:

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

性能优化建议

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

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

相关文章

vue实现网站

vue实现网站

Vue.js 实现网站的基本步骤 Vue.js 是一个渐进式 JavaScript 框架,适合构建用户界面和单页应用(SPA)。以下是实现网站的基本流程。 环境准备 安装 Node.js 和 npm…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $d…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE T…