从表中获取记录

时间:2013-01-20 19:29:16

标签: php mysql pdo

我在使用以下内容从表中获取数据时遇到问题。

$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 个答案:

答案 0 :(得分:3)

您似乎混合了插入和选择语法。

您的选择语法应该是:

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

除此之外,您应该浏览SO并搜索secure password hashing,因为md5不安全。

答案 1 :(得分:0)

您没有使用有效的SQL查询。 VALUES()仅用于UPDATE语句。

尝试使用声明

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

答案 2 :(得分:0)

SELECT * FROM users WHERE (email,password) VALUES (:email,:password)

需要

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

我还鼓励您使用密码的SALT值来抵御彩虹表攻击。

答案 3 :(得分:-1)

正如上述用户所注意到的,问题出在SQL查询中。 为了捕获和显示SQL错误,您将来应该使用try catch语句。

try {
  /*Code to access database with PDO*/
}
catch(PDOException $e) {
  echo $e->getMessage();
}