PHP会话与MySQL数据库:SELECT无报错但无法获取userid值
问题排查与解决步骤
首先,你的代码里$rowLogin[userid]没有给键名加引号,这是必须修正的——PHP中数组的字符串键名得用单引号或双引号包裹,不然PHP会把它当作常量解析,就算没定义过userid常量,这种写法也不规范,容易踩坑,先改成:
echo '<p>test 2' . $rowLogin['userid'];
接下来按以下步骤逐一排查:
- 核对数据库字段名:确认
db.table表中,用户ID的字段名确实是userid(注意:Linux系统下MySQL的表名、字段名区分大小写,Windows不区分)。要是字段实际叫user_id、UserID这类,那$rowLogin['userid']肯定取不到值。 - 打印完整数组看真实数据:在循环里加一行
var_dump($rowLogin);,直接看返回的数组里有哪些键和对应的值,比如:
这样能直观确认数据库返回的结果里有没有while ($rowLogin = $stmtdo->fetch(PDO::FETCH_ASSOC)) { echo '<p>test<p>'; var_dump($rowLogin); // 输出完整数组结构 echo '<p>test 2' . $rowLogin['userid']; ... }userid字段,以及它的值到底是什么。 - 验证SQL执行细节:虽然
rowCount()返回1,但可以用$stmtdo->debugDumpParams();打印实际执行的SQL语句和绑定的参数,比如:
这能帮你确认查询语句是不是真的包含了$stmtdo->execute(); $stmtdo->debugDumpParams(); // 输出SQL语句与绑定的参数值 $rows = $stmtdo->rowCount();userid字段,参数绑定有没有出错。 - 开启PDO错误提示:默认PDO不会主动抛出错误,连接数据库后加上这行,能看到潜在的报错信息:
这样如果查询或数据获取过程中有问题,会直接抛出异常,方便定位。$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
最可能的问题就是字段名拼写/大小写不匹配,或者键名没加引号导致的解析异常,先把这两个点修正后再测试。
内容的提问来源于stack exchange,提问作者bobafart
相关产品推荐
相关产品推荐

