php实现搜索功能
实现基本搜索功能
在PHP中实现搜索功能通常涉及数据库查询。假设使用MySQL数据库,可以通过以下代码实现基础搜索:
$searchTerm = $_GET['search'] ?? '';
if (!empty($searchTerm)) {
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM products WHERE name LIKE :search");
$stmt->execute([':search' => "%$searchTerm%"]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
多字段搜索扩展
当需要在多个字段中搜索时,可以扩展SQL查询:
$stmt = $db->prepare("SELECT * FROM products
WHERE name LIKE :search
OR description LIKE :search
OR category LIKE :search");
安全防护措施
为防止SQL注入,必须使用预处理语句。同时应对搜索词进行处理:
$searchTerm = trim($_GET['search']);
$searchTerm = htmlspecialchars($searchTerm, ENT_QUOTES, 'UTF-8');
全文索引优化
对于大型数据库,应考虑使用全文索引提高搜索效率:
-- 创建全文索引
ALTER TABLE products ADD FULLTEXT(name, description);
$stmt = $db->prepare("SELECT * FROM products
WHERE MATCH(name, description) AGAINST(:search IN BOOLEAN MODE)");
分页处理
搜索结果较多时应实现分页功能:
$page = $_GET['page'] ?? 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$stmt = $db->prepare("SELECT * FROM products
WHERE name LIKE :search
LIMIT :limit OFFSET :offset");
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
前端交互实现
HTML表单部分代码示例:
<form method="get" action="search.php">
<input type="text" name="search" placeholder="输入搜索内容">
<button type="submit">搜索</button>
</form>
搜索结果展示
在显示搜索结果时应注意安全性和用户体验:
foreach ($results as $result) {
echo '<div class="result-item">';
echo '<h3>' . htmlspecialchars($result['name']) . '</h3>';
echo '<p>' . nl2br(htmlspecialchars($result['description'])) . '</p>';
echo '</div>';
}
高级搜索功能
实现带过滤条件的高级搜索:

$category = $_GET['category'] ?? '';
$minPrice = $_GET['min_price'] ?? 0;
$sql = "SELECT * FROM products WHERE name LIKE :search";
$params = [':search' => "%$searchTerm%"];
if (!empty($category)) {
$sql .= " AND category = :category";
$params[':category'] = $category;
}
if ($minPrice > 0) {
$sql .= " AND price >= :min_price";
$params[':min_price'] = $minPrice;
}






