Php 从表中提取记录

Php 从表中提取记录,php,mysql,pdo,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->

我从表中获取数据时遇到以下问题

$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']; 
    }
};

有人能看出我哪里出了问题吗?如果不工作,则不会向我的浏览器输出任何内容

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

选择语法应类似于:

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

此外,由于
md5
不安全,您应该查看SO并搜索
secure password hashing

您没有使用有效的SQL查询
VALUES()
仅与
UPDATE
语句一起使用

尽量使用语句

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

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

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

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

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

错误检查和显示是否打开?您运行的$query是有条件的,这只是一个字符串,我想您需要检查$stmt=$dbh->prepare($query)是否返回properly@Liam您应该将错误处理添加到数据库调用中,例如,请参见:
try {
  /*Code to access database with PDO*/
}
catch(PDOException $e) {
  echo $e->getMessage();
}