PHP读取MySQL数据填充HTML表格时代码被直接输出问题排查
故障原因及修复方案
1. 核心问题:PHP代码未被服务端解析
你遇到的代码片段直接打印到页面、$row['EXAMPLE']这类变量原样显示的问题,本质是Web服务器没有把文件里的PHP代码交给解析引擎执行,直接把代码当普通HTML文本输出了,触发场景一般是两种:
- 文件后缀是
.html/.htm而非.php:默认配置下Web服务器只会对.php后缀的文件做PHP解析,静态后缀文件会直接原样返回给浏览器。 - 访问方式不对:直接双击本地文件用
file://协议打开,或者没有把文件放到Web服务器的运行目录下通过HTTP地址(如http://localhost/xxx.php)访问,这种情况完全不会经过服务端处理。
浏览器遇到<?php这类无法识别的标签时,会将其当做自定义HTML标签处理,标签内部的代码一部分被识别为标签属性、一部分被当做普通文本渲染,就会出现你看到的半截PHP代码直接露在页面上的现象。
修复方法:把文件后缀改为
.php,放到Web服务器的站点目录下,通过对应的HTTP访问地址打开。
2. 代码存在语法错误
你写的循环输出逻辑里,echo语句末尾缺少PHP要求的分号结束符,就算PHP正常解析,这处错误也会导致脚本直接中断:
// 原错误写法,echo语句末尾缺分号 echo "<tr> <td>" . $row['EXAMPLE'] . "</td> <td>" . $row['EXAMPLE2'] . "</td> </tr>" }
修复方法:在echo语句的字符串闭合引号后补分号,改成
</tr>";。更推荐直接把PHP和HTML拆分开写,不要把整段HTML拼在echo字符串里,能减少很多语法错误,可读性也更高。
3. 缺少必要的错误捕获逻辑
你当前的代码没有做任何错误判断,一旦数据库连接失败、SQL语句写错,后续逻辑会直接报致命错误,也看不到具体报错信息:
- 连接数据库后要先判断是否连接成功,再执行查询
- 执行SQL后要判断查询是否成功,再遍历结果集
- 记得设置字符集,避免中文乱码
可直接参考的修复后完整代码:
<?php // 数据库连接配置 $host = "example"; $username = "example"; $password = "example"; $database = "example"; $con = new mysqli($host, $username, $password, $database); // 检查连接状态 if ($con->connect_error) { die("数据库连接失败:" . $con->connect_error); } // 设置字符集 $con->set_charset("utf8mb4"); $sql = "SELECT EXAMPLE, EXAMPLE2 FROM EXAMPLE"; $result = $con->query($sql); // 检查查询执行状态 if (!$result) { die("SQL执行错误:" . $con->error); } ?> <table border="1" cellpadding="8"> <thead> <tr> <th>EXAMPLE</th> <th>EXAMPLE2</th> </tr> </thead> <tbody> <?php while ($row = $result->fetch_assoc()) { ?> <tr> <td><?php echo $row['EXAMPLE']; ?></td> <td><?php echo $row['EXAMPLE2']; ?></td> </tr> <?php } // 释放资源、关闭连接 $result->free(); $con->close(); ?> </tbody> </table>
内容的提问来源于stack exchange,提问作者SkyHawk
相关产品推荐
相关产品推荐

