如何使用PHP将MySQL查询值正确显示到HTML div中
问题修复方案
你代码里有4个直接导致功能失效的错误,按优先级改完就能正常显示:
- 基础语法错误:第一行
include(db-config.php)没有给文件名加引号,PHP会把db-config识别为未定义常量,直接抛出语法错误,后续所有逻辑都不会执行,正确写法是include 'db-config.php';。 - 会话启动顺序错误:
session_start()必须放在所有PHP逻辑、文件引入、内容输出的最顶端,你现在把include语句放在它前面,只要被引入的文件里存在哪怕一个空行、隐式报错,都会导致会话启动失败,SESSION值根本无法写入。 - 核心逻辑缺失:你直接给SESSION赋值
$result->mbalance,但代码里根本没有针对当前登录用户查询数据库余额字段的步骤。$result要么是登录验证时的查询结果(绝大多数登录逻辑只会查用户名、密码两个字段,不会返回余额信息),要么是未定义的空变量,自然拿不到对应的值。 - 数据格式不匹配:你用对象属性符
->读取查询结果,但如果你的数据库查询是用mysqli_fetch_assoc()获取的关联数组,这种写法会直接报错,必须用数组下标$userData['字段名']的格式读取。
可直接复用的正确代码
首先把所有PHP逻辑放在页面最顶部(所有HTML输出之前):
<?php // 开启报错,调试阶段用,上线可以删掉 error_reporting(E_ALL); ini_set('display_errors', 1); // 必须最先启动会话 session_start(); // 引入数据库配置,文件名记得加引号 include 'db-config.php'; // 登录态校验,没登录直接跳回登录页 if (!isset($_SESSION['username'])) { header("Location: login.php"); exit; } // 用预处理语句查询当前登录用户的余额字段,把下面的`user_table`改成你实际的用户表名 $stmt = $conn->prepare("SELECT mbalance, callbalance, avdbalance FROM user_table WHERE username = ?"); $stmt->bind_param("s", $_SESSION['username']); $stmt->execute(); $result = $stmt->get_result(); $userInfo = $result->fetch_assoc(); $stmt->close(); // 把查询到的数据写入SESSION $_SESSION['smsbalance'] = $userInfo['mbalance']; $_SESSION['callbalance'] = $userInfo['callbalance']; $_SESSION['avdbalance'] = $userInfo['avdbalance']; ?>
页面HTML部分的输出写法:
<div><strong>SMS Credit balance:</strong> <?php echo $_SESSION['smsbalance']; ?></div> <div><strong>Call balance:</strong> <?php echo $_SESSION['callbalance']; ?></div> <div><strong>AVD balance:</strong> <?php echo $_SESSION['avdbalance']; ?></div>
快速排查技巧
- 调试阶段直接开PHP报错,能直接定位是语法问题、数据库连接问题还是变量未定义,不用无意义试错。
- 写完SESSION赋值逻辑后可以加一行
var_dump($_SESSION);打印整个会话数组,直接确认值有没有写入、内容是否正确。 - 如果后续要加年龄、班级这类字段,只要在上面的SELECT查询里加上对应的字段名,再赋值到SESSION里即可,不用修改其他逻辑。
内容的提问来源于stack exchange,提问作者Chibuike Ezeiru
相关产品推荐
相关产品推荐

