php搜索功能实现
PHP 搜索功能实现
在 PHP 中实现搜索功能通常涉及数据库查询、表单处理和结果展示。以下是几种常见的实现方法。
基础数据库搜索
使用 MySQL 数据库和 PHP 实现简单搜索功能:
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 获取搜索关键词
$search_term = isset($_GET['search']) ? $_GET['search'] : '';
// 执行查询
if (!empty($search_term)) {
$stmt = $conn->prepare("SELECT * FROM products WHERE name LIKE ?");
$search_term = "%$search_term%";
$stmt->bind_param("s", $search_term);
$stmt->execute();
$result = $stmt->get_result();
} else {
$result = $conn->query("SELECT * FROM products");
}
// 显示结果
while ($row = $result->fetch_assoc()) {
echo $row['name'] . "<br>";
}
// 关闭连接
$conn->close();
表单处理
创建搜索表单的 HTML:
<form action="search.php" method="get">
<input type="text" name="search" placeholder="输入搜索内容">
<button type="submit">搜索</button>
</form>
高级搜索功能
实现多条件搜索:
$search_name = $_GET['name'] ?? '';
$search_category = $_GET['category'] ?? '';
$query = "SELECT * FROM products WHERE 1=1";
$params = [];
if (!empty($search_name)) {
$query .= " AND name LIKE ?";
$params[] = "%$search_name%";
}
if (!empty($search_category)) {
$query .= " AND category_id = ?";
$params[] = $search_category;
}
$stmt = $conn->prepare($query);
if (!empty($params)) {
$types = str_repeat('s', count($params));
$stmt->bind_param($types, ...$params);
}
全文搜索
对于更高效的文本搜索,可以使用 MySQL 的全文索引:
-- 创建全文索引
ALTER TABLE articles ADD FULLTEXT(title, content);
PHP 中使用全文搜索:
$search_term = $_GET['search'] ?? '';
if (!empty($search_term)) {
$stmt = $conn->prepare("
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(? IN NATURAL LANGUAGE MODE)
");
$stmt->bind_param("s", $search_term);
$stmt->execute();
$result = $stmt->get_result();
}
分页处理
为搜索结果添加分页功能:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$per_page = 10;
$offset = ($page - 1) * $per_page;
$query = "SELECT * FROM products WHERE name LIKE ? LIMIT ? OFFSET ?";
$search_term = "%$search_term%";
$stmt = $conn->prepare($query);
$stmt->bind_param("sii", $search_term, $per_page, $offset);
安全注意事项
- 始终使用预处理语句防止 SQL 注入
- 对用户输入进行验证和过滤
- 限制搜索结果的返回数量
- 对特殊字符进行转义处理
以上方法可以根据具体需求进行组合和扩展,构建适合不同场景的搜索功能。







