You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中将行数据转换为列?现有代码失效,需实现指定表格展示

问题解决:学术数据表格横向展示

原数据结构(存储表)

levelpercentage
Degree50
Diploma70
Post Diploma67

目标展示格式

DegreeDiplomaPost Diploma
507067

原代码存在的问题

  • 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>

关键修正说明

  1. 代码结构规范:明确分离PHP逻辑与HTML标签,避免语法混乱
  2. SQL安全优化:使用参数绑定替代变量拼接,彻底规避SQL注入风险
  3. 逻辑补全:新增Post Diploma的CASE分支,匹配目标表格需求
  4. 结果处理优化:直接获取单行结果(查询仅返回一行数据),无需循环
  5. 异常兼容:使用??运算符处理无数据时的NULL值,保证页面显示完整性

内容的提问来源于stack exchange,提问作者Kinzang N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:17:38