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
相关产品推荐
相关产品推荐

