
本文详解如何在独立 php 项目中安全连接数据库、执行 select 查询,并将结果动态渲染到 html 页面中,涵盖文件引入、结果遍历、变量作用域及基础错误防护。
要在 PHP 网站中正确显示数据库查询结果(如菜品列表),需解决两个核心问题:数据库连接不可见($link 未定义)和查询结果未遍历赋值($nom、$description 等变量未从结果集中提取)。以下是完整、可直接运行的解决方案。
✅ 步骤一:正确引入配置文件
site.php 必须在执行任何数据库操作前加载 config.php,否则 $link 变量处于未定义状态,导致致命错误。使用 require(而非 include)确保配置加载失败时立即终止脚本,避免静默错误:
⚠️ 注意:config.php 应位于与 site.php 相同目录下;若路径不同,请调整相对路径(如 require './includes/config.php';)。
✅ 步骤二:安全执行查询并遍历结果集
原始代码中 $res = mysqli_query($link, $sql) 后未检查查询是否成功,也未循环读取多行数据。应添加错误处理,并使用面向对象风格的 fetch_object() 遍历每条记录:
fetch_object()) {
$did = (int)$row->did; // 强制转为整型,提升安全性
$nom = htmlspecialchars($row->nom, ENT_QUOTES, 'UTF-8');
$description = htmlspecialchars($row->description, ENT_QUOTES, 'UTF-8');
?>
close(); // 显式关闭结果集,释放内存
?>? 关键注意事项
- SQL 注入防护:当前示例为静态查询,若后续需带用户输入(如 WHERE id = ?),务必改用 MySQLi 预处理语句。
- XSS 防护:所有输出到 HTML 的变量均经 htmlspecialchars() 转义,防止恶意脚本注入。
- 资源释放:调用 $res->close() 是良好实践,尤其在循环大量数据时。
- 字段名校验:确保数据库表 dish 中真实存在 did、nom、description 字段(区分大小写),可通过 phpMyAdmin 或 DESCRIBE dish; 验证。
? 总结
正确显示数据库内容 ≠ 仅写 echo $var。它要求:① 通过 require 建立作用域可见的连接;② 用循环结构消费结果集;③ 对输出进行安全转义;④ 添加基础错误反馈。遵循以上步骤,即可稳定、安全地将 MySQL 数据渲染至前端页面——这是原生 PHP 开发的基石能力,也是迈向 MVC 框架(如 Laravel、Laminas)前必须掌握的核心实践。
立即学习“PHP免费学习笔记(深入)”;











