PDO报错:尝试访问布尔类型值的数组偏移量问题解决
PDO报错:Trying to access array offset on value of type bool 解决方案
问题场景
尝试从数据库中获取varchar类型的nivel字段值时,触发PDO错误:Trying to access array offset on value of type bool。
原错误代码
<?php include("./db.php"); $sentencia = $conexion->prepare("SELECT nivel FROM usuarios WHERE usuario=:usuario"); $sentencia->bindParam(":usuario", $_SESSION['usuario']); $sentencia->execute(); $registro = $sentencia->fetch(PDO::FETCH_LAZY); $registro["nivel"]; ?> <?php include("plantillas/header.php"); ?> </br> <style> body { background-image: url('https://png.pngtree.com/background/20211217/original/pngtree-geometric-pattern-white-gold-minimalist-creative-background-picture-image_1575961.jpg'); background-repeat: no-repeat; background-size: 100% 100%; } </style> <br><br><br><br> <div class="p-5 mb-4 bg-light rounded-3 bg-dark text-white" > <div class="container-fluid py-5" > <h1 class="display-5 fw-bold">Bienvenid@ al Sistema</h1> <p class="col-md-8 fs-4">Usuario : <?php echo $_SESSION['usuario'];?></p> <p class="col-md-8 fs-4">Nivel de usuario : <?php echo $nivel;?></p> <a class="btn btn-primary btn-lg" href="./confeti.php" type="button" target="_blank">🎉</a> </div> </div> <?php include("plantillas/footer.php"); ?>
错误原因
管理会话的header.php(推测包含session_start()及会话初始化逻辑)被放在数据库查询代码之后,导致执行查询时$_SESSION['usuario']未初始化,查询条件无效,数据库返回空结果集,PDOStatement::fetch()返回布尔值false。后续尝试访问$registro["nivel"]时,就会触发"访问布尔值的数组偏移量"错误。
另外原代码未将$registro["nivel"]赋值给$nivel变量,即使查询成功,页面中<?php echo $nivel;?>也无法输出正确值。
修正后的代码
<?php include("plantillas/header.php"); ?> <?php include("./db.php"); $sentencia = $conexion->prepare("SELECT nivel FROM usuarios WHERE usuario=:usuario"); $sentencia->bindParam(":usuario", $_SESSION['usuario']); $sentencia->execute(); $registro = $sentencia->fetch(PDO::FETCH_LAZY); $nivel = $registro["nivel"]; // 补充赋值,确保页面能输出字段值 ?>
(注:完整页面代码需将上述修正后的PHP部分替换原代码对应区域,保证header.php在所有依赖会话的代码之前引入)
内容的提问来源于stack exchange,提问作者Hugo Jiménez
相关产品推荐
相关产品推荐

