php实现网站查询功能实现
PHP实现网站查询功能
在PHP中实现网站查询功能通常涉及数据库操作和用户输入处理。以下是一个基本的实现方法:
数据库连接与查询
使用PHP的PDO扩展连接数据库并执行查询:
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$searchTerm = $_GET['search'] ?? '';
$stmt = $conn->prepare("SELECT * FROM products WHERE name LIKE :search");
$stmt->bindValue(':search', '%'.$searchTerm.'%');
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
前端搜索表单
创建一个简单的HTML表单来接收用户输入:
<form action="search.php" method="get">
<input type="text" name="search" placeholder="Search...">
<button type="submit">Search</button>
</form>
结果显示
在页面中显示查询结果:
if (!empty($results)) {
foreach ($results as $row) {
echo "<div class='result'>";
echo "<h3>".htmlspecialchars($row['name'])."</h3>";
echo "<p>".htmlspecialchars($row['description'])."</p>";
echo "</div>";
}
} else {
echo "No results found.";
}
高级查询功能实现
分页处理
对于大量结果,添加分页功能:
$perPage = 10;
$page = $_GET['page'] ?? 1;
$offset = ($page - 1) * $perPage;
$totalQuery = $conn->query("SELECT COUNT(*) FROM products WHERE name LIKE '%$searchTerm%'");
$total = $totalQuery->fetchColumn();
$stmt = $conn->prepare("SELECT * FROM products WHERE name LIKE :search LIMIT :offset, :perPage");
$stmt->bindValue(':search', '%'.$searchTerm.'%');
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
多条件搜索
实现更复杂的多字段搜索:
$conditions = [];
$params = [];
if (!empty($_GET['name'])) {
$conditions[] = "name LIKE :name";
$params[':name'] = '%'.$_GET['name'].'%';
}
if (!empty($_GET['category'])) {
$conditions[] = "category_id = :category";
$params[':category'] = $_GET['category'];
}
$where = !empty($conditions) ? 'WHERE '.implode(' AND ', $conditions) : '';
$query = "SELECT * FROM products $where";
$stmt = $conn->prepare($query);
foreach ($params as $key => $value) {
$stmt->bindValue($key, $value);
}
安全注意事项
输入验证
对所有用户输入进行过滤和验证:
$searchTerm = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_STRING);
防止SQL注入
始终使用预处理语句而不是直接拼接SQL:
// 错误方式(不安全):
// $query = "SELECT * FROM products WHERE name LIKE '%$searchTerm%'";
// 正确方式(安全):
$stmt = $conn->prepare("SELECT * FROM products WHERE name LIKE :search");
$stmt->bindValue(':search', '%'.$searchTerm.'%');
性能优化
为常用搜索字段添加索引:
CREATE INDEX idx_product_name ON products(name);
考虑使用全文搜索功能提高效率:

ALTER TABLE products ADD FULLTEXT(name, description);
SELECT * FROM products WHERE MATCH(name, description) AGAINST('search term');






