-2

次のようにテーブルからデータをフェッチするのに問題があります。

$email = $_POST['email'];
$password = md5($_POST['password']);

$query = "SELECT * FROM users WHERE (email,password) VALUES (:email,:password)";
  $stmt = $dbh->prepare($query);
  $stmt->bindParam(':email', $email);
  $stmt->bindParam(':password', $password);
  $stmt->execute();

if(!$query){
    echo 'Whoops, something went wrong!';
} else {
    while($r = $stmt->fetch(PDO::FETCH_LAZY)){
        echo $r['surname']; 
    }
};

どこが間違っているのか誰にもわかりますか?動作しないことにより、ブラウザに何も出力されません

4

4 に答える 4

3

構文の挿入と選択を混同しているようです。

選択する構文は次のようになります。

$query = "SELECT * FROM users WHERE email=:email AND password=:password";

それとは別に、SOを調べて、安全ではないsecure password hashingものを検索する必要があります。md5

于 2013-01-20T19:33:47.280 に答える
0

有効なSQLクエリを使用していません。ステートメントVALUES()でのみ使用されます。UPDATE

ステートメントを使用してみてください

SELECT * FROM users WHERE email = :email AND password =:password
于 2013-01-20T19:39:15.290 に答える
0
SELECT * FROM users WHERE (email,password) VALUES (:email,:password)

する必要があります

SELECT * FROM users WHERE email = :email AND password = :password

また、レインボー テーブル攻撃を防ぐために、パスワードに SALT 値を使用することをお勧めします。

于 2013-01-20T19:44:33.063 に答える
-1

上記のユーザーが気付いたように、問題はSQLクエリにありました。SQLエラーをキャッチして表示するには、将来、trycatchステートメントを使用する必要があります。

try {
  /*Code to access database with PDO*/
}
catch(PDOException $e) {
  echo $e->getMessage();
}
于 2013-01-20T19:52:59.823 に答える