为了账号安全,请及时绑定邮箱和手机立即绑定

查询不成功返回消息

查询不成功返回消息

PHP
30秒到达战场 2022-01-08 17:30:17
我正在使用以下脚本来获取用户的密码:public function getHash($email) {    return $this->createQueryBuilder('u')        ->select('u.password')        ->where('u.email = :email')        ->setParameter('email', $email)        ->getQuery()        ->getResult()     ;}我用以下方法调用该方法:var_dump($this->getDoctrine()    ->getRepository(Users::class)    ->getHash('mail@example.com'));但我收到以下通知:注意:未定义的偏移量:0我收到此通知的原因是该字符串mail@example.com在我的数据库中不存在。我只想知道查询是否成功。像这样的东西:if ($this->getDoctrine()->getRepository(Users::class)->getHash('mail@example.com')) {    echo 'All good';}else {    echo 'There is an error';}我怎样才能做到这一点?
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

看来您的错误来自代码的不同部分。当您尝试访问0没有此键的数组的索引时。

对于无结果检查原则,在未找到结果时应抛出NoResultException。(或者它为->getSingleResult()函数执行此操作)您可以简单地捕获此异常并按照您认为合适的方式处理它。


查看完整回答
反对 回复 2022-01-08
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

此方法返回所有匹配结果的数组:

->getResult()

检查是否没有匹配:


$results = $this->getDoctrine()->getRepository(Users::class)->getHash('mail@example.com');

if(empty($results){

    echo 'There is an error';

} else {

    $hash = $results[0];

}

此方法返回一个结果或null:

->getOneOrNullResult()

检查是否不匹配:


$hash = $this->getDoctrine()->getRepository(Users::class)->getHash('mail@example.com');

if(null===$hash){

    echo 'There is an error';

}

注:

由于getOneOrNullResult()您可以将结果直接分配到$hash直持续到比较结果的用户提供密码的哈希您的验证逻辑。如果没有用户$hash会null,以便正常失败的比较,你可以处理,就像输入了错误的密码。牢记安全性,如果您确认该电子邮件没有用户,您就是在帮助黑客,因为现在他们知道不要花时间猜测该电子邮件的密码。


查看完整回答
反对 回复 2022-01-08
?
慕神8447489

TA贡献1780条经验 获得超1个赞

可能是你应该使用

->getOneOrNullResult();

并在控制器中检查 if 语句?

if(null === $result){}


查看完整回答
反对 回复 2022-01-08
  • 3 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信