2014-10-03 25 views
1

給「未定義的變量」的錯誤,我抓住從下面的SQL語句計數統計($hits):使用或在SQL語句在PHP

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

拼搶變量在while()循環在這裏工作正常,它不是,直到我嘗試這個辦法:

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

當我嘗試拉,我得到一個「undifined變量」錯誤「打」作爲$hits = $row['hits'];

我想我們呃能夠使用用戶名或電子郵件地址登錄。誰能告訴我爲什麼第一個SQL語句工作正常,但第二個不?

我的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']; 
} 
+0

是行定義的嗎? – 2014-10-03 16:01:00

+0

我已經嘗試了SQL Server Management Studio 2012中的第二條語句並替換了變量,它會爲'hits'返回一個值。 PHP不喜歡在第二個語句中使用':username'嗎? – proPhet 2014-10-03 16:01:49

+0

你可能需要綁定兩次 - 請分享你的php。 – 2014-10-03 16:02:33

回答

1

問題

看看這裏:

用戶名= :用戶名或電子郵件= :用戶名

可以在PDO做到這一點,而不是默認的至少

解決方案

添加第三個PARAMS

用戶名= :用戶名或電子郵件= :username_email

and bind到相同的$username價值,沒關係。

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

我測試了OP的代碼,它對我來說工作得很好。我認爲問題出在桌子上。 – 2014-10-03 18:27:03

+0

問題可以使用這個答案來解決,儘管解決方案之前發佈爲評論。我給@Stv一個機會發布答案,如果這沒有發生我會接受這個答案。 – proPhet 2014-10-03 18:32:19

+0

@fred -ii-我相信你已經開啓了模擬,不能使用默認 – meda 2014-10-03 18:34:30

2

好吧,這裏一個合適的回答:

$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); 

希望這個作品。