当前位置:首页 > PHP

php实现搜索功能

2026-01-08 12:11:46PHP

实现基础搜索功能

使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。

// 搜索表单 (HTML部分)
<form method="GET" action="search.php">
    <input type="text" name="keyword" placeholder="输入搜索关键词">
    <button type="submit">搜索</button>
</form>

// 处理搜索 (PHP部分 - search.php)
$keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';
if (!empty($keyword)) {
    $db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    $stmt = $db->prepare("SELECT * FROM articles WHERE title LIKE :keyword OR content LIKE :keyword");
    $stmt->execute([':keyword' => "%$keyword%"]);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

使用全文索引提高效率

对于大型数据库,LIKE查询效率较低。MySQL的全文索引(FULLTEXT)能显著提升文本搜索性能,特别适用于文章内容等长文本搜索。

php实现搜索功能

-- 创建全文索引 (MySQL)
ALTER TABLE articles ADD FULLTEXT(title, content);
// 使用全文索引查询
$stmt = $db->prepare("
    SELECT * FROM articles 
    WHERE MATCH(title, content) AGAINST(:keyword IN BOOLEAN MODE)
");
$stmt->execute([':keyword' => $keyword]);

实现分页功能

搜索结果较多时,分页功能必不可少。结合LIMIT和OFFSET实现数据分页显示。

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

$stmt = $db->prepare("
    SELECT SQL_CALC_FOUND_ROWS * FROM articles 
    WHERE MATCH(title, content) AGAINST(:keyword) 
    LIMIT :offset, :perPage
");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute([':keyword' => $keyword]);

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

添加搜索建议功能

使用AJAX实现实时搜索建议可以提升用户体验。当用户输入时,前端通过AJAX请求获取搜索建议。

php实现搜索功能

// 前端JavaScript
document.getElementById('search-input').addEventListener('input', function() {
    fetch(`suggest.php?term=${encodeURIComponent(this.value)}`)
        .then(response => response.json())
        .then(data => showSuggestions(data));
});
// suggest.php
$term = $_GET['term'] ?? '';
$stmt = $db->prepare("
    SELECT title FROM articles 
    WHERE title LIKE :term 
    LIMIT 5
");
$stmt->execute([':term' => "%$term%"]);
echo json_encode($stmt->fetchAll(PDO::FETCH_COLUMN));

高级搜索功能实现

对于复杂需求,可以实现多条件组合搜索,包括分类筛选、日期范围等高级搜索选项。

// 构建动态SQL查询
$conditions = [];
$params = [];

if (!empty($_GET['keyword'])) {
    $conditions[] = "MATCH(title, content) AGAINST(:keyword)";
    $params[':keyword'] = $_GET['keyword'];
}

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

if (!empty($_GET['start_date'])) {
    $conditions[] = "publish_date >= :start_date";
    $params[':start_date'] = $_GET['start_date'];
}

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

$stmt = $db->prepare($sql);
$stmt->execute($params);

搜索结果高亮显示

在搜索结果中高亮显示匹配关键词,提升结果可读性。

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

// 在输出结果时调用
foreach ($results as $result) {
    echo highlightKeyword($result['title'], $keyword);
    echo highlightKeyword($result['content'], $keyword);
}

标签: 搜索功能php
分享给朋友:

相关文章

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php session实现购物车

php session实现购物车

PHP Session 实现购物车 初始化 Session 确保在使用 Session 前调用 session_start() 函数。通常放在 PHP 文件的最顶部。 <?php sessio…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <div st…

vue 实现搜索功能

vue 实现搜索功能

实现搜索功能的基本思路 在Vue中实现搜索功能通常涉及以下几个核心步骤:监听用户输入、过滤数据列表、动态更新视图。以下是具体实现方法。 监听用户输入 使用v-model双向绑定搜索框的输入值,实时获…