2

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側に関係していると思いますが、行き詰まっていて、助けが必要です。ありがとう

4

1 に答える 1

3

'userName'列に含まれる値ではなく、などの文字列リテラルを選択しています。

この問題を解決するには、列名を囲む引用符を削除します。

SELECT userName,email,code,...

または、バッククォートを使用します(許可されますが、列名が予約語の場合にのみ必要です):

SELECT `userName`,`email`,`code`,...
于 2012-06-16T19:04:40.513 に答える