php实现网站查询功能
数据库连接与查询
在PHP中实现网站查询功能,通常需要先建立数据库连接。使用PDO或MySQLi扩展连接MySQL数据库。PDO方式兼容多种数据库,MySQLi专为MySQL设计。
// PDO连接示例
$host = 'localhost';
$dbname = 'database_name';
$user = 'username';
$pass = 'password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
表单设计与处理
创建HTML表单接收用户查询输入,表单提交后通过PHP处理查询请求。
<form method="GET" action="search.php">
<input type="text" name="search_term" placeholder="输入查询内容">
<button type="submit">搜索</button>
</form>
安全查询处理
使用预处理语句防止SQL注入,对用户输入进行过滤和验证。

if(isset($_GET['search_term'])) {
$searchTerm = trim($_GET['search_term']);
$searchTerm = htmlspecialchars($searchTerm);
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE :term");
$stmt->bindValue(':term', '%'.$searchTerm.'%', PDO::PARAM_STR);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
结果展示
将查询结果以清晰的方式展示给用户,可以分页显示大量结果。
if(!empty($results)) {
foreach($results as $row) {
echo "<div class='result-item'>";
echo "<h3>".$row['name']."</h3>";
echo "<p>".$row['description']."</p>";
echo "</div>";
}
} else {
echo "没有找到匹配的结果";
}
高级查询功能
实现更复杂的查询功能,如多条件查询、排序和筛选。

// 多条件查询示例
$category = isset($_GET['category']) ? $_GET['category'] : '';
$minPrice = isset($_GET['min_price']) ? (float)$_GET['min_price'] : 0;
$sql = "SELECT * FROM products WHERE name LIKE :term";
$params = [':term' => '%'.$searchTerm.'%'];
if(!empty($category)) {
$sql .= " AND category = :category";
$params[':category'] = $category;
}
if($minPrice > 0) {
$sql .= " AND price >= :min_price";
$params[':min_price'] = $minPrice;
}
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
性能优化
对查询进行优化,使用索引提高查询速度,考虑实现缓存机制。
// 添加LIMIT限制返回结果数量
$stmt = $pdo->prepare("SELECT * FROM products WHERE name LIKE :term LIMIT 20");
AJAX实时搜索
使用JavaScript和AJAX实现无需刷新页面的实时搜索功能。
// jQuery AJAX示例
$('#search-input').on('keyup', function() {
$.ajax({
url: 'live_search.php',
method: 'POST',
data: {term: $(this).val()},
success: function(response) {
$('#results-container').html(response);
}
});
});






