注意:试图访问第25行C:\xampp\htdocs\twitter\core\classes\follow.php中bool类型值的数组偏移量

注意:试图访问第25行C:\xampp\htdocs\twitter\core\classes\follow.php中bool类型值的数组偏移量,php,arrays,pdo,Php,Arrays,Pdo,一切似乎都很好,但我遇到了一个错误: 我检查了follow.php和profile.php中的打字错误,甚至重新键入了代码的主要部分,但没有找到问题所在。 这是follow.php的第25行 if($data['reciever'] == $profileID) if($data['reciever'] == $profileID) 这是我的follow.php <?php class Follow extends User { function __con

一切似乎都很好,但我遇到了一个错误:

我检查了follow.php和profile.php中的打字错误,甚至重新键入了代码的主要部分,但没有找到问题所在。 这是follow.php的第25行

if($data['reciever'] == $profileID)
if($data['reciever'] == $profileID)
这是我的follow.php

    <?php
class Follow extends User
{
    
    function __construct($pdo)
    {
        $this->pdo = $pdo;
    }
    public function checkFollow($followerID, $user_id)
    {
        $stmt = $this->pdo->prepare("SELECT * FROM `follow` WHERE `sender` = :user_id AND `reciever` = :followerID");
        $stmt->bindParam(":user_id", $user_id, PDO::PARAM_INT);
        $stmt->bindParam(":followerID", $followerID, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
    
    public function followBtn($profileID, $user_id)
    {
        $data = $this->checkFollow($profileID, $user_id);
        if($this->loggedIn() === true)
        {
            if($profileID != $user_id)
            {
                if($data['reciever'] == $profileID)
                {
                    //Following Button
                    echo "<button class='f-btn following-btn follow-btn' data-follow='".$profileID."'>Following</button>";
                }
                else
                {
                    //follow button
                    echo "<button class='f-btn following-btn follow-btn' data-follow='".$profileID."'><i class='fa fa-user-plus'></i>Follow</button>";
                }
            }
            else
            {
                //edit button
                echo "<button class='f-btn' onclick=location.href='profileEdit.php'>Edit Profile</button>";

            }
        }
        else
        {
            echo "<button class='f-btn' onclick=location.href='index.php'><i class='fa fa-user-plus'></i>Follow</button>";
        }
    }
}
?>
根据错误,我们试图访问数组中的元素,但该对象实际上是一个布尔值。所以,$data必须是一个布尔值。看几行,第20行有:

$data = $this->checkFollow($profileID, $user_id);
所以$data是由checkFollow的返回值设置的。checkFollow必须为我们提供一个布尔值。查看checkFollow,我们看到它返回以下内容:

return $stmt->fetch(PDO::FETCH_ASSOC);
布尔值必须来自$stmt->fetch。让我们看一下此方法的文档,其中说明:

此函数在成功时的返回值取决于获取 类型。在所有情况下,失败时返回FALSE

我的数据库:

这就是错误的来源。为什么fetch返回FALSE?也许查询没有返回任何结果。可能数据库中没有与给定参数匹配的行。但我不知道如何实现它,因为我刚刚开始使用PHP。如果有人能向我展示语法以便更好地说明,我将不胜感激。!
谢谢大家!

当结果集中没有更多行时,返回
false
。您的查询与任何内容都不匹配您应该在尝试使用它之前检查
$stmt->fetch
的结果。如果为false,您可以通过查看
$stmt->errorInfo()
(假设存在错误,问题不是查询没有返回结果)来查看错误是什么。查看您的代码,它看起来不错,但可能是您误发了
receiver
?因为您的查询只会返回
$data['receiver']
等于
$profileID
false
的数组,如果($data!==false),您可以安全地更改为
@Nick我如何检查
$stmt->fetch的结果
我是否需要注释我的'followBtn'函数以检查结果?我是否需要替换
return$stmt->fetch(PDO::fetch\u ASSOC)被其他东西?不,相同的拼写“receiver”已经被带到我的数据库中too@Ben听起来值得单独问一个问题。如果这样做,当结果集中没有更多行时,您可能希望删除此返回值
false
。您的查询与任何内容都不匹配您应该在尝试使用它之前检查
$stmt->fetch
的结果。如果为false,您可以通过查看
$stmt->errorInfo()
(假设存在错误,问题不是查询没有返回结果)来查看错误是什么。查看您的代码,它看起来不错,但可能是您误发了
receiver
?因为您的查询只会返回
$data['receiver']
等于
$profileID
false
的数组,如果($data!==false),您可以安全地更改为
@Nick我如何检查
$stmt->fetch的结果
我是否需要注释我的'followBtn'函数以检查结果?我是否需要替换
return$stmt->fetch(PDO::fetch\u ASSOC)被其他东西?不,相同的拼写“receiver”已经被带到我的数据库中too@Ben听起来值得单独问一个问题。如果这样做,您可能希望删除此项