当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());
  

【问题讨论】:

哪一行报错了?另外,$dataprofile 函数中定义在哪里? @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类型值的数组偏移量的主要内容,如果未能解决你的问题,请参考以下文章

尝试访问 bool PHP 类型值的数组偏移量 [重复]

尝试在 PHP 7.4 中访问 bool 类型值的数组偏移量

如何优化限制查询以便从庞大的表中更快地访问数据?

Laravel Newsletter 包错误:尝试访问 bool 类型值的数组偏移量

试图在php中访问bool类型值的数组偏移量[重复]

MySQL 如何从今天记录的表中选择数据?