2012-06-16 40 views
2

我使用Mysqli OO使用MySQL語句CASE搜索數據庫中的2個特定值。如果找到兩個值,那麼它將返回值'真',如果只有一個被發現,該值是'假',如果都沒有找到,那麼結果就不是。無論如何,我有這個工作,但我的問題是我需要它也顯示列中相關的值。Mysqli - 使用select case但其他數據沒有綁定

$query = "SELECT 'userName','email','code', 
CASE 
    WHEN (email=? AND code=?) THEN 'true' 
    WHEN (email=?) THEN 'false' 
    ELSE 'NONE' 
END AS answer 
FROM users WHERE email=?"; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param("ssss", $email,$code, $email,$email); 
$email = $mysqli->real_escape_string($email); 
$code = $mysqli->real_escape_string($code); 
$stmt->execute(); 
$stmt->bind_result($user,$email,$code,$answer); 
$stmt->fetch(); 
print_r($stmt->fetch); 
$stmt->store_result(); 
echo "User: ".$user." Email: ".$email." Code: ".$code." Answer: ".$answer; 

好了,所以當我運行的代碼,它應顯示爲:

User: ryan Email: [email protected] Code: 12 Answer: true 

而是將其顯示爲:

User: userName Email: email Code: code Answer: true 

所以,我認爲錯誤是更多的是與SQL的一面,但我卡住了,想要一些幫助。由於

+0

您的代碼由於多種原因,永遠不會返回「既不」。 –

+0

我的意思是'真/假'作爲術語而不是布爾表達式,而這兩個表達式都不是我頭上的第一件事情:S。 –

回答

3

您選擇字符串文字如'userName',不包含在列中的值。

爲了解決這個問題,或者刪除引號輪列名:

SELECT userName,email,code,... 

或者使用反引號(允許的,但前提是該列名是reserved word必填項):

SELECT `userName`,`email`,`code`,... 
+0

Omg,我從來沒有意識到我這麼做過,這個簡單的錯誤讓我花了很長時間才弄清楚。非常感謝您指出這一點:D –