查询不成功返回消息

我正在使用以下脚本来获取用户的密码:


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';

}

我怎样才能做到这一点?


30秒到达战场
浏览 142回答 3
3回答

梦里花落0921

看来您的错误来自代码的不同部分。当您尝试访问0没有此键的数组的索引时。对于无结果检查原则,在未找到结果时应抛出NoResultException。(或者它为->getSingleResult()函数执行此操作)您可以简单地捕获此异常并按照您认为合适的方式处理它。

一只斗牛犬

此方法返回所有匹配结果的数组:->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,以便正常失败的比较,你可以处理,就像输入了错误的密码。牢记安全性,如果您确认该电子邮件没有用户,您就是在帮助黑客,因为现在他们知道不要花时间猜测该电子邮件的密码。

慕神8447489

可能是你应该使用->getOneOrNullResult();并在控制器中检查 if 语句?if(null === $result){}
打开App,查看更多内容
随时随地看视频慕课网APP