php实现搜索查询功能实现
数据库连接与配置
使用PDO或MySQLi建立数据库连接。以下为PDO示例代码:
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
创建搜索表单
HTML表单用于接收用户输入的搜索关键词:
<form method="GET" action="search.php">
<input type="text" name="search_query" placeholder="Enter search term...">
<button type="submit">Search</button>
</form>
处理搜索请求
在PHP文件中处理搜索逻辑,使用预处理语句防止SQL注入:
if (isset($_GET['search_query'])) {
$searchTerm = '%' . $_GET['search_query'] . '%';
$stmt = $pdo->prepare("SELECT * FROM products
WHERE name LIKE :search
OR description LIKE :search");
$stmt->bindParam(':search', $searchTerm);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
显示搜索结果
遍历查询结果并显示:
if (!empty($results)) {
foreach ($results as $row) {
echo "<div class='result-item'>";
echo "<h3>" . htmlspecialchars($row['name']) . "</h3>";
echo "<p>" . htmlspecialchars($row['description']) . "</p>";
echo "</div>";
}
} else {
echo "No results found.";
}
高级搜索功能
实现多字段搜索和分页处理:
// 多字段搜索示例
$stmt = $pdo->prepare("SELECT * FROM products
WHERE (name LIKE :search OR description LIKE :search)
AND price BETWEEN :min_price AND :max_price");
$stmt->execute([
':search' => $searchTerm,
':min_price' => $minPrice,
':max_price' => $maxPrice
]);
// 分页处理
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM products
WHERE name LIKE :search
LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->bindParam(':search', $searchTerm);
$stmt->execute();
全文索引优化
对于大型数据库,考虑使用MySQL的全文索引:
ALTER TABLE products ADD FULLTEXT(name, description);
PHP中使用MATCH AGAINST语法:
$stmt = $pdo->prepare("SELECT * FROM products
WHERE MATCH(name, description) AGAINST(:search IN BOOLEAN MODE)");
$stmt->bindParam(':search', $_GET['search_query']);
安全注意事项
始终对输出进行转义防止XSS攻击:
htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8');
验证和过滤所有用户输入:
$searchTerm = filter_input(INPUT_GET, 'search_query', FILTER_SANITIZE_STRING);






