【发布时间】:2020-05-20 07:53:22
【问题描述】:
$query = $pdo -> prepare("SELECT * FROM Users WHERE Username =:Username");
$query->bindParam(':Username', $name);
$query->execute();
$nameRes = $query->fetch(PDO::FETCH_ASSOC);
if ($nameRes['Username']==$_POST['username']) {
die ("Username is already in use!");
}
$query = $pdo -> prepare("SELECT * FROM Users WHERE Email =:Email");
$query->bindParam(':Email', $email);
$query ->execute();
$emailRes = $query->fetch(PDO::FETCH_ASSOC);
if ($emailRes['Email']==$_POST['email']) {
die ("Email is already in use!");
}
我在我的应用程序的注册页面上有这个代码,当用户名可以免费使用但电子邮件不是,反之亦然我得到这个
注意:尝试访问 bool 类型值的数组偏移量
好的,结果返回 false,但在这种情况下该怎么办?注意:这是在 php v7.4 上,同样的事情也在 v7.3 上工作
【问题讨论】:
-
只需检查是否返回了任何行,将
if ($emailRes['Email']==$_POST['email']) {替换为if ($emailRes) {($nameRes也一样) -
好的,解决了,非常感谢。但是有人能解释一下为什么它过去可以在以前的版本上运行,而现在不能在这个新版本上运行吗?
-
问题可能是您的查询没有返回任何行。如果返回一行,它会正常工作。
-
这似乎是一个弱策略。如果有人在此用户名检查用户名是否存在时提交了用户名怎么办?
-
当然,您可以通过
SELECT COUNT(Username) FROM Users WHERE Username =:Username OR Email =:Email将其简化为一个查询