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();
}