私はSQLに不慣れで、phpでログインフォームを作成しようとしています。ブルートフォース攻撃を防ぐために、ログインフォームに少しIPブロックを実行させたいです。したがって、usersとloginattemptsの2つのテーブルがあります。ユーザー名とパスワードの組み合わせが正しい場合にユーザーの名前/IDを返す選択を実行しようとしていますが、その正確性に関係なく、ログイン試行クエリの結果が必要です。ここに少しのコードがあります。
まず、次のようにして、loginattemptテーブルにエントリがあることを確認します。
INSERT INTO loginattempts (ip) VALUES(:ip)
ON DUPLICATE KEY UPDATE attempt=attempt+1
次に、次のような選択を行います。
SELECT users.username, users.id, loginattempts.attempt
FROM users, loginattempts
WHERE users.username = :username
AND users.password = :password
AND loginattempts.ip = :ip
ただし、いずれかの条件が満たされない場合、これは明らかに機能しません。単一のクエリでこれをどのように達成できますか?