SELECT hashed_password = '{$hashed_password}' AS is_password_correct
FROM employees WHERE email = '{$email}'
$email に一致するエントリがない場合、このクエリは 0 行を返します。
$email に一致する行がある場合、select-list 内のブール等価比較が true か false かに基づいて、クエリは 1 または 0 を返します。
その後、考えられる 3 つの状態に応じて、アプリでさまざまなことを行うことができます。
PHP で非推奨の「mysql」関数を使用するのをやめるべきです。それらは PHP の次のバージョンで廃止されます。mysqli または PDO を使用します。
また、準備されたクエリを使用し、$hashed_password と $email をクエリ パラメータとして渡す方法を学ぶ必要があります。これにより、SQL インジェクションの脆弱性を回避でき、文字列のエスケープについて心配する必要がなくなります。
PDO を使用した完全な例 (未テスト) を次に示します。
$stmt = $pdo->prepare("SELECT hashed_password = :password AS is_password_correct
FROM employees WHERE email = :email");
if ($stmt === false) {
// always check for errors
}
$result = $stmt->execute(array(":password"=>$hashed_password, ":email"=>$email));
if ($result === false) {
// always check for errors
}
if ($stmt->rowCount() == 0) {
// no such user
} else {
while ($row = $stmt->fetch()) {
if ($row["is_password_correct"] == 1) {
// password is correct for the given user
} else {
// password is wrong
}
}
}