php实现搜索
PHP实现搜索功能
在PHP中实现搜索功能通常涉及数据库查询、表单处理和结果展示。以下是几种常见的实现方法:
基础数据库搜索
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 获取搜索关键词
$search = isset($_GET['search']) ? $_GET['search'] : '';
// 执行查询
if (!empty($search)) {
$stmt = $conn->prepare("SELECT * FROM products WHERE name LIKE ?");
$searchTerm = "%$search%";
$stmt->bind_param("s", $searchTerm);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['name'] . "<br>";
}
}
多条件搜索
$search = $_GET['search'] ?? '';
$category = $_GET['category'] ?? '';
$query = "SELECT * FROM products WHERE 1=1";
$params = [];
$types = '';
if (!empty($search)) {
$query .= " AND (name LIKE ? OR description LIKE ?)";
$params[] = "%$search%";
$params[] = "%$search%";
$types .= 'ss';
}
if (!empty($category)) {
$query .= " AND category_id = ?";
$params[] = $category;
$types .= 'i';
}
$stmt = $conn->prepare($query);
if (!empty($params)) {
$stmt->bind_param($types, ...$params);
}
全文索引搜索(MySQL)
对于更高效的搜索,可以在MySQL中创建全文索引:
ALTER TABLE products ADD FULLTEXT(name, description);
PHP代码:

$search = $_GET['search'] ?? '';
if (!empty($search)) {
$stmt = $conn->prepare("SELECT * FROM products
WHERE MATCH(name, description) AGAINST(? IN BOOLEAN MODE)");
$stmt->bind_param("s", $search);
$stmt->execute();
// 处理结果...
}
前端表单示例
<form method="GET" action="search.php">
<input type="text" name="search" placeholder="输入关键词...">
<select name="category">
<option value="">所有分类</option>
<option value="1">电子产品</option>
<option value="2">服装</option>
</select>
<button type="submit">搜索</button>
</form>
搜索结果分页
$page = $_GET['page'] ?? 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$query = "SELECT SQL_CALC_FOUND_ROWS * FROM products
WHERE name LIKE ? LIMIT ? OFFSET ?";
$searchTerm = "%$search%";
$stmt = $conn->prepare($query);
$stmt->bind_param("sii", $searchTerm, $limit, $offset);
$stmt->execute();
// 获取总记录数
$totalResult = $conn->query("SELECT FOUND_ROWS()");
$totalRows = $totalResult->fetch_row()[0];
$totalPages = ceil($totalRows / $limit);
安全注意事项
- 始终使用预处理语句防止SQL注入
- 对用户输入进行验证和过滤
- 限制搜索结果的返回数量
- 对敏感数据进行访问控制
这些方法可以根据具体需求进行调整和组合,构建适合不同场景的搜索功能。






