2012-06-16 26 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 –