0

これを見てくれてありがとう。ユーザー、ロール、および user_roles を持つデータベースがあります。私が達成しようとしているのは、管理者またはアソシエイト権限を持つユーザーを選択するログインです。ログインでは、名前とパスワードを使用してアクセスを許可します。

これまでの私のSQL構文は-

SELECT * FROM users 
LEFT JOIN ON user_roles 
ON user.id=user_roles.userid AND roleid IN (Administrator, Associate) 
WHERE username = '$username' AND password = '$password'";

どこが間違っているのかわかりません。

よろしくお願いします。

4

2 に答える 2

1

「LEFT JOIN」を「INNER JOIN」に置き換えてみてください

于 2009-11-13T16:49:52.047 に答える
0

クエリの書き方は次のとおりです。

$stmt = $pdo->prepare("
SELECT (u.password = :password) AS password_is_correct,
  (r.roleid IS NOT NULL) AS role_is_authorized
FROM users u
LEFT JOIN ON user_roles r
  ON u.id=r.userid AND r.roleid IN (Administrator, Associate) 
WHERE u.username = :username");

$stmt->execute(array(":password"=>$password, ":username"=>$username));

これにより、(1) ユーザー名が存在しない、(2) パスワードが間違っている、または (3) 役割が許可されていないという 3 つの状態を区別できます。

PS: 「管理者」と「アソシエイト」を引用する必要がありますか? それらを使用している方法では、値ではなく識別子のように見えます。

于 2009-11-13T17:19:11.753 に答える