php实现搜索实例
PHP 实现搜索功能
数据库准备
确保有一个数据库表用于存储搜索内容。例如,创建一个包含 id, title, content 字段的 articles 表。
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT
);
基础搜索实现
通过 SQL 的 LIKE 语句实现简单搜索功能。
<?php
$searchTerm = $_GET['search'] ?? '';
$results = [];
if (!empty($searchTerm)) {
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM articles WHERE title LIKE :term OR content LIKE :term");
$stmt->execute([':term' => "%$searchTerm%"]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>
<form method="GET">
<input type="text" name="search" placeholder="搜索...">
<button type="submit">搜索</button>
</form>
<?php if (!empty($results)): ?>
<ul>
<?php foreach ($results as $result): ?>
<li>
<h3><?php echo htmlspecialchars($result['title']); ?></h3>
<p><?php echo htmlspecialchars($result['content']); ?></p>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
全文索引优化
对于大量数据,使用 MySQL 的全文索引 (FULLTEXT) 提高搜索效率。
ALTER TABLE articles ADD FULLTEXT(title, content);
修改 PHP 代码使用 MATCH AGAINST 语法:
$stmt = $db->prepare("SELECT * FROM articles WHERE MATCH(title, content) AGAINST(:term IN NATURAL LANGUAGE MODE)");
$stmt->execute([':term' => $searchTerm]);
分页处理
添加分页功能避免结果过多。
$page = $_GET['page'] ?? 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$stmt = $db->prepare("SELECT * FROM articles WHERE MATCH(title, content) AGAINST(:term) LIMIT :limit OFFSET :offset");
$stmt->bindParam(':term', $searchTerm);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
安全与性能建议
- 使用预处理语句防止 SQL 注入
- 对输出内容使用
htmlspecialchars()防止 XSS - 对于超大规模数据考虑 Elasticsearch 或 Solr
- 添加搜索关键词高亮功能提升用户体验







