我正在使用Mysqli OO使用MySQL语句CASE在数据库中搜索2个特定值。如果找到两个值,那么它将返回值'true',如果只找到一个值为'false',如果两个都没有找到,那么结果都不是。无论如何我有这个工作,但我的问题是我需要它也显示列中相关的值。
$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: local@localhost Code: 12 Answer: true
但它显示为:
User: userName Email: email Code: code Answer: true
所以我认为错误更多的是与它的SQL方面有关,但我被困住了,希望得到一些帮助。感谢
答案 0 :(得分:3)
您正在选择字符串文字,例如'userName'
,而不是列中包含的值。
要解决此问题,请删除列名称旁边的引号:
SELECT userName,email,code,...
或者使用反引号(允许,但只有在列名为reserved word时才需要):
SELECT `userName`,`email`,`code`,...