当php中的表中没有记录时,尝试访问bool类型值的数组偏移量
Posted
技术标签:
【中文标题】当php中的表中没有记录时,尝试访问bool类型值的数组偏移量【英文标题】:Trying to access array offset on value of type bool when there is no records in the table in php 【发布时间】:2021-09-11 19:27:16 【问题描述】:我有三个表 register、profile 和 uploaddoc 表。在配置文件表中,我插入了相关注册用户的多条记录,在uploaddoc 中,我插入了配置文件的多条记录。最后,我从 profile 和 uploaddoc 表中获取最新记录。
我使用以下代码在我的页面上获取输出。我正在将配置文件 ID 传递给 uploaddoc 表以获取相关记录。
function profile($reg_id,$pdo)
$query='SELECT * FROM `tbl_profile` WHERE sp_id=(SELECT MAX(sp_id) FROM tbl_profile where reg_id ='.$reg_id.' GROUP BY reg_id order by reg_id DESC) and is_active=1';
$stmt = $pdo->prepare($query);
$stmt->execute();
$row = $stmt->fetch();
$data['profile']=$row;
if (!empty($row))
$query2='SELECT * FROM `tbl_uploadAll` WHERE u_id='.$row['sp_id'].' and is_active=1';
$stmt = $pdo->prepare($query2);
$stmt->execute();
$row2 = $stmt->fetchAll();
$data['uploadedDoc']=$row2;
return $data;
当页面加载时,我正在调用配置文件函数
<?php
$info=profile($_SESSION['reg_id'],$pdo);
$info['profile']; // getting single records
$info['uploadedDoc'] // getting the multiple records and displaying using for condition
?>
如果档案和uploadDoc 中的记录可用,那么我正在获取数据并且它正在工作。
现在,我的问题是,如果配置文件和 uploadDoc 表中没有与注册 ID 相关的记录,那么我会收到错误消息。
注意:尝试访问 bool 类型值的数组偏移量
有没有办法解决这个问题?
connection.php
<?php
session_start();
$hostname = "localhost";
$username = "root";
$password = "test";
$db="test";
$charset = 'utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$dsn = "mysql:host=$hostname;dbname=$db;charset=$charset";
try
$pdo = new PDO($dsn, $username, $password, $options);
catch (PDOException $e)
throw new PDOException($e->getMessage(), (int)$e->getCode());
【问题讨论】:
哪一行报错了?另外,$data
在profile
函数中定义在哪里?
@AndreaOlivato,我有 $data['profile'] 和 $data['uploadedDoc'] 我正在将数据发送到 html。我需要像这样定义 $data[] 吗?
当我显示像 $info['profile']['name'] 这样的数据时,我收到了错误
如果你使用 var_dump($info) 会发生什么?
@AndreaOlivato,我得到 array(1) ["profile"]=> bool(false)
【参考方案1】:
我已经修改了代码: $query='SELECT * FROM tbl_profile WHERE sp_id=(SELECT MAX(sp_id) FROM tbl_profile reg_id =? GROUP BY reg_id order by reg_id DESC) and is_active=?'; $stmt = $pdo->prepare($query); $stmt->execute([$reg_id,$is_active]); $row = $stmt->fetch(); $data['profile']=$row; if (!empty($row)) $query2='SELECT * FROM tbl_uploadAll WHERE u_id=?和 is_active=?'; $stmt = $pdo->prepare($query2); $stmt->execute([$sp_id,$is_active]); $row2 = $stmt->fetchAll(); $data['uploadedDoc']=$row2; 返回$数据;
【讨论】:
这个查询对我有什么帮助? 你测试了吗?【参考方案2】:尝试再次引用 $pdo 作为 $pdo = $this->pdo; 那就是如果你在同一个类中使用 $pdo 或使用 __construct
【讨论】:
我正在从数据库连接中获取 $pdo 问题中添加了connection.php代码以上是关于当php中的表中没有记录时,尝试访问bool类型值的数组偏移量的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 PHP 7.4 中访问 bool 类型值的数组偏移量