简体   繁体   English

在SQL语句中使用OR,在PHP中给出“未定义的变量”错误

[英]Using OR in a SQL statement giving 'undefined variable' error in PHP

I'm grabbing a count stat ( $hits ) from the following sql statement: 我从以下sql语句中获取count stat( $hits ):

SELECT COUNT(*) AS hits FROM users 
    WHERE password = :password
    AND username = :username

Grabbing the variable in a while() loop here works fine, it's not untill I try this: while()循环中抓取变量在这里工作正常,它不是直到我尝试这样:

SELECT COUNT(*) AS hits FROM users 
    WHERE password = :password
    AND (username = :username OR email = :username)

that I get an 'undifined variable' error when I try pull 'hits' as $hits = $row['hits']; 当我尝试将'命中'拉为$hits = $row['hits'];时,我得到了一个'unifined variable'错误$hits = $row['hits'];

I want a user to be able to log in using a username or email address. 我希望用户能够使用用户名或电子邮件地址登录。 Can anyone tell me why the first SQL statement works fine but the second does not? 任何人都可以告诉我为什么第一个SQL语句工作正常但第二个没有?

My PHP is as follows: 我的PHP如下:

// COUNT HITS
$COUNT_HITS = $DBH->prepare("SELECT COUNT(*) AS hits FROM users WHERE password = :password AND (username = :username OR email = :username)");
$COUNT_HITS->bindParam(':password', $password);
$COUNT_HITS->bindParam(':username', $username);
$COUNT_HITS->execute();
while($row = $COUNT_HITS->fetch(PDO::FETCH_ASSOC)){
    $hits= $row['hits'];
}

Ok, here a proper answer : 好的,这是一个正确的答案:

$COUNT_HITS = $DBH->prepare("SELECT COUNT(*) AS hits FROM users WHERE password = :password AND (username = :username OR email = :email)"); 
$COUNT_HITS->bindParam(':password', $password);
$COUNT_HITS->bindParam(':username', $username);
$COUNT_HITS->bindParam(':email', $username);

Hope this works. 希望这有效。

Problem 问题

Look here: 看这里:

username = :username OR email = :username username = :username或email = :username

You can do this in PDO, not by default at least 您可以在PDO中执行此操作,而不是默认情况下

Solution

Add a third params 添加第三个参数

username = :username OR email = :username_email username = :username OR email = :username_email

and bind to the same $username value, that's okay. 并绑定到相同的$username值,这没关系。

$COUNT_HITS->bindParam(':password', $password);
$COUNT_HITS->bindParam(':username', $username);
$COUNT_HITS->bindParam(':username_email', $username);
$COUNT_HITS->execute();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM