You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP注册功能报Trying to access array offset on value of type bool错误如何修复

报错原因

PDO的fetch(PDO::FETCH_ASSOC)方法在查询结果为空的时候会返回布尔值false而非数组。当你提交的邮箱和手机号都没有在数据库中存在过的时候,查询返回的$row就是false,此时你直接访问$row['email'](第37行)和$row['phone'](第39行),就会触发“尝试访问布尔类型值的数组偏移”的Notice级报错。
由于PHP弱类型特性,false == $email的判断结果为假,所以逻辑会正常走到后续的用户插入分支,因此注册功能本身可以正常使用,仅多出Notice提示。

修复方案

在访问$row的数组下标前,先判断$row是否为有效查询结果(是否存在重复数据),修改对应逻辑段即可:

$row = $select_stmt->fetch(PDO::FETCH_ASSOC);

// 仅当查询到重复记录时才做匹配校验
if($row){
    if($row['email'] == $email){
        $errorMsg[] = "Adres e-mail jest już zajęty";
    }else if($row['phone'] == $phone){
        $errorMsg[] = "Numer telefonu został juz podany do innego konta";
    }
}

// 没有错误提示时执行插入逻辑
if(!isset($errorMsg)){
    $new_password = password_hash($password, PASSWORD_DEFAULT);
    $insert_stmt = $db->prepare("INSERT INTO user (fname, lname, email, phone, password) VALUES (:fname, :lname, :email, :phone, :password)");
    if($insert_stmt->execute(array( ':fname' =>$fname,
                                    ':lname' =>$lname,
                                    ':email' =>$email,
                                    ':phone' =>$phone,
                                    ':password' => $new_password))){
        $registerMsg = "Udało sie zarejestrować";
    }
}

内容的提问来源于stack exchange,提问作者slomus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:03:00