如何在PHP中将行数据转换为列?现有代码失效,需实现指定表格展示
问题解决:学术数据表格横向展示
原数据结构(存储表)
| level | percentage |
|---|---|
| Degree | 50 |
| Diploma | 70 |
| Post Diploma | 67 |
目标展示格式
| Degree | Diploma | Post Diploma |
|---|---|---|
| 50 | 70 | 67 |
原代码存在的问题
- PHP代码未正确闭合标签(开头缺失
<?php),导致HTML与PHP逻辑混写错误 - SQL语句中使用未定义变量作为别名,引发语法错误
- 结果集取值时错误统一使用
'percentage'键,无法获取对应等级的数值 - 缺少
Post Diploma的处理逻辑 - 直接拼接
$emp_id到SQL中,存在严重SQL注入风险
修正后的完整代码
<?php // 假设$conn是已建立的数据库连接实例 $emp_id = "目标员工ID"; // 替换为实际业务中的员工ID变量 // 构建安全的SQL查询:覆盖所有三个学历等级,使用参数绑定防止注入 $stmtc = $conn->prepare(" SELECT MAX(CASE WHEN level = 'Degree' THEN percentage END) AS degree_percent, MAX(CASE WHEN level = 'Diploma' THEN percentage END) AS diploma_percent, MAX(CASE WHEN level = 'Post Diploma' THEN percentage END) AS post_diploma_percent FROM tbl_academic_qualification WHERE member_no = ? "); // 绑定参数,类型为字符串(s),对应$emp_id $stmtc->bind_param("s", $emp_id); $stmtc->execute(); // 获取关联数组格式的结果行 $rowc = $stmtc->get_result()->fetch_assoc(); ?> <table> <tr> <th>Degree</th> <th>Diploma</th> <th>Post Diploma</th> </tr> <tr> <!-- 使用??运算符处理可能的NULL值,默认显示0 --> <td><?php echo $rowc['degree_percent'] ?? 0; ?></td> <td><?php echo $rowc['diploma_percent'] ?? 0; ?></td> <td><?php echo $rowc['post_diploma_percent'] ?? 0; ?></td> </tr> </table>
关键修正说明
- 代码结构规范:明确分离PHP逻辑与HTML标签,避免语法混乱
- SQL安全优化:使用参数绑定替代变量拼接,彻底规避SQL注入风险
- 逻辑补全:新增
Post Diploma的CASE分支,匹配目标表格需求 - 结果处理优化:直接获取单行结果(查询仅返回一行数据),无需循环
- 异常兼容:使用
??运算符处理无数据时的NULL值,保证页面显示完整性
内容的提问来源于stack exchange,提问作者Kinzang N
相关产品推荐
相关产品推荐

