如何使用PHP PDO生成SQL Server动态透视表?
如何使用PHP PDO生成SQL Server动态透视表?
嘿,我来帮你搞定这个问题!先理清楚你的现状和需求,再一步步实现。
你的现有情况
你已经在SQL Server里有个动态透视表tis_temp_dsr,数据大概是这样的:
customer_no customer_name jan2025 feb2025 mar2025 total CNWL000132 Juan 20 30 0 50
你要实现的目标
你需要把这些数据生成一个标准的HTML表格,表头对应透视表的字段,内容对应每条记录,大概像这样:
<table> <thead> <tr> <th>customer_no</th> <th>customer_name</th> <th>jan2025</th> <th>feb2025</th> <th>mar2025</th> <th>total</th> </tr> </thead> <tbody> <tr> <td>CNWL000132</td> <td>Juan</td> <td>20</td> <td>30</td> <td>0</td> <td>50</td> </tr> </tbody> </table>
用PHP PDO实现的具体步骤
第一步:连接SQL Server数据库
首先得用PDO连上你的数据库,注意填写正确的服务器名、数据库名和账号密码:
<?php // 替换成你的数据库信息 $serverName = "你的SQL Server服务器地址"; $database = "目标数据库名"; $username = "数据库账号"; $password = "数据库密码"; try { // 建立PDO连接,开启异常模式方便排错 $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("数据库连接失败:" . $e->getMessage()); } ?>
第二步:获取透视表的表头和数据
因为是动态透视表,月份列可能会随时增加(比如之后加apr2025),所以不能硬写表头,得从数据库里动态获取字段名,同时拉取所有数据:
// 动态获取表头字段(按原表顺序) $headerQuery = $conn->query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tis_temp_dsr' ORDER BY ORDINAL_POSITION"); $headers = $headerQuery->fetchAll(PDO::FETCH_COLUMN); // 获取表中所有数据 $dataQuery = $conn->query("SELECT * FROM tis_temp_dsr"); $rows = $dataQuery->fetchAll(PDO::FETCH_ASSOC);
第三步:动态生成HTML表格
拿到表头和数据后,就可以循环生成表格了,这样不管之后透视表加多少列,代码都能自动适配:
// 开始输出表格 echo "<table border='1' cellpadding='8' cellspacing='0'>"; // 生成表头 echo "<thead><tr>"; foreach ($headers as $header) { echo "<th>" . htmlspecialchars($header) . "</th>"; } echo "</tr></thead>"; // 生成表体内容 echo "<tbody>"; foreach ($rows as $row) { echo "<tr>"; foreach ($headers as $header) { // 用htmlspecialchars转义内容,避免XSS风险 echo "<td>" . htmlspecialchars($row[$header]) . "</td>"; } echo "</tr>"; } echo "</tbody></table>"; // 关闭数据库连接 $conn = null; ?>
几个关键点提醒
- 用
INFORMATION_SCHEMA.COLUMNS获取表头是核心,保证了代码的动态性,不用每次加列都改代码。 htmlspecialchars()一定要加,防止用户输入的特殊字符破坏HTML结构,也避免XSS攻击。- PDO的异常模式能帮你快速定位数据库操作中的错误,比静默模式好用多了。
备注:内容来源于stack exchange,提问作者Mir
相关产品推荐
相关产品推荐

