PHP从MS SQL取数据无法生成HTML表格求助
问题分析与修复方案
嘿Dan,我帮你梳理下代码里的几个核心问题,这些就是导致表格无法正常渲染的关键:
1. 结果集指针被耗尽,后续循环拿不到数据
你第一个while(odbc_fetch_row($dbResult))已经把查询结果的指针移到了末尾,当后面再用odbc_fetch_array($dbResult)时,结果集已经没有剩余数据可以读取了,所以表格的tbody部分是空的。
2. HTML标签语法错误
你写的<table-id-"table1">是完全错误的标签写法,正确的应该是<table id="table1">。
3. 字符串拼接逻辑错误(覆盖而非追加)
构建表格内容时,你用的是$o='<tr>...</tr>',这会把之前的$o内容完全覆盖,而不是把每一行的内容追加进去,正确的写法应该用$o .= '<tr>...</tr>'(注意是.=)。
4. 变量使用错误
第二个循环里你用的$Description和$outcomes是第一个循环里最后一次赋值的结果,并不是当前行的数据;而且[$Description]这种写法是错误的,直接写变量名就行,不需要加方括号。
5. 输出顺序混乱
你先把数据用<br>直接输出在页面上,之后才输出表格,这会导致页面内容杂乱无章。
修复后的完整代码
<?php $databs ='C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\MRT.mdf'; $dbConnect = odbc_connect("MRTServ","","") or die("Error opening database .... use the browsers BACK button"); if ($dbConnect) { // 只查询需要的列,比SELECT *更高效且清晰 $dbQuery = "SELECT Description, outcomes FROM Callouts"; $dbResult = odbc_exec($dbConnect,$dbQuery); // 初始化表格HTML结构 $o = '<div id="ATtable"> <table id="table1"> <thead> <tr> <th>Description</th> <th>Outcomes</th> </tr> </thead> <tbody>'; // 循环读取结果集,逐行构建表格内容 while ($record = odbc_fetch_array($dbResult)) { $description = $record['Description']; $outcomes = $record['outcomes']; // 用.=追加行内容,避免覆盖之前的表格结构 $o .= '<tr><td>'.$description.'</td><td>'.$outcomes.'</td></tr>'; } // 闭合表格相关标签 $o .= '</tbody> </table> </div>'; // 输出完整的表格HTML echo $o; odbc_close($dbConnect); } ?>
额外优化建议
- 尽量避免使用
SELECT *,只查询你需要的列,既减少数据传输量,也让代码逻辑更清晰。 - 变量名可以遵循小驼峰或下划线命名风格(比如
$description而非$Description),保持代码风格统一。 - 可以给表格加基础CSS样式让它更美观:
#table1 { border-collapse: collapse; width: 100%; margin: 1rem 0; } #table1 th, #table1 td { border: 1px solid #ddd; padding: 8px; text-align: left; } #table1 th { background-color: #f5f5f5; }
内容的提问来源于stack exchange,提问作者Daniel Scott
相关产品推荐
相关产品推荐

