php实现分数查询
实现分数查询功能
在PHP中实现分数查询功能通常涉及数据库操作和前端展示。以下是一个完整的实现方案,涵盖数据库设计、查询逻辑和前端展示。
数据库设计
创建一个名为scores的表,包含学生信息和分数字段:
CREATE TABLE scores (
id INT AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(50) NOT NULL,
student_id VARCHAR(20) NOT NULL,
subject VARCHAR(30) NOT NULL,
score FLOAT NOT NULL,
exam_date DATE
);
连接数据库
使用PDO建立数据库连接:
$host = 'localhost';
$dbname = 'score_db';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
查询功能实现
创建查询表单页面(search_form.php):
<form action="search_results.php" method="get">
<label for="student_id">学号:</label>
<input type="text" id="student_id" name="student_id" required>
<label for="subject">科目:</label>
<select id="subject" name="subject">
<option value="">全部科目</option>
<option value="数学">数学</option>
<option value="语文">语文</option>
<option value="英语">英语</option>
</select>
<button type="submit">查询</button>
</form>
创建结果展示页面(search_results.php):
$student_id = $_GET['student_id'] ?? '';
$subject = $_GET['subject'] ?? '';
$sql = "SELECT * FROM scores WHERE student_id = :student_id";
$params = [':student_id' => $student_id];
if (!empty($subject)) {
$sql .= " AND subject = :subject";
$params[':subject'] = $subject;
}
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (count($results) > 0) {
echo "<table border='1'>";
echo "<tr><th>姓名</th><th>学号</th><th>科目</th><th>分数</th><th>考试日期</th></tr>";
foreach ($results as $row) {
echo "<tr>";
echo "<td>{$row['student_name']}</td>";
echo "<td>{$row['student_id']}</td>";
echo "<td>{$row['subject']}</td>";
echo "<td>{$row['score']}</td>";
echo "<td>{$row['exam_date']}</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "未找到匹配的记录";
}
安全性增强
添加输入验证和防SQL注入措施:
$student_id = filter_input(INPUT_GET, 'student_id', FILTER_SANITIZE_STRING);
$subject = filter_input(INPUT_GET, 'subject', FILTER_SANITIZE_STRING);
if (empty($student_id)) {
die("学号不能为空");
}
分页功能
对于大量数据结果,可以添加分页功能:
$page = $_GET['page'] ?? 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM scores WHERE student_id = :student_id";
if (!empty($subject)) {
$sql .= " AND subject = :subject";
}
$sql .= " LIMIT $limit OFFSET $offset";
// 执行查询后获取总记录数
$total_stmt = $pdo->query("SELECT FOUND_ROWS()");
$total = $total_stmt->fetchColumn();
$total_pages = ceil($total / $limit);
导出功能
添加导出为CSV的功能:
if (isset($_GET['export'])) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="scores.csv"');
$output = fopen('php://output', 'w');
fputcsv($output, ['姓名', '学号', '科目', '分数', '考试日期']);
foreach ($results as $row) {
fputcsv($output, $row);
}
fclose($output);
exit;
}
这个实现方案提供了完整的分数查询功能,包括数据库设计、查询表单、结果展示、安全措施和额外功能。可以根据实际需求进行调整和扩展。







