我正在构建一个简单的登录系统。我遇到的问题是从数据库中获取密码哈希。
这就是我所拥有的:
$statement = 'SELECT Pass FROM Emails WHERE Email = "?"';
$question = array($email);
try {
$DB->beginTransaction();
$preparedStatement = $DB->prepare($statement);
$preparedStatement->execute($question);
$resultArr = $preparedStatement->fetchAll();
print_r($resultArr);
$DB->commit();
} catch(\PDOException $ex) {
echo "Seriously bad error. ";
echo $ex->getMessage();
return false;
}
我的问题是$resultArr
始终不包含任何元素。
我知道SQL查询本身有效,因为我直接在MySQL中测试过它。
我相信我必须使用预备语句,因为我正在向MySQL发送用户输入并且必须防御轻松的SQL注入攻击。
我正在使用fetchAll()
以确保给定电子邮件只有一个结果。否则,会有一个很大的问题。
我的错误是什么?
答案 0 :(得分:-1)
只是为了清理这个极其多余的代码
$stmt = $DB->prepare('SELECT Pass FROM Emails WHERE Email = ?');
$stmt->execute(array($email));
$pass = $stmt->fetchColumn();
这三行是运行查询并获得结果所需的全部。
是的,问题只是引用?标记
为确保没有其他电子邮件,您应该在Mysql中使用唯一索引
答案 1 :(得分:-1)
$query = 'SELECT Pass FROM Emails WHERE Email = :email';
try {
$DB->beginTransaction();
$preparedStatement = $DB->prepare($query);
$preparedStatement->bindParam("email", $email, PDO::PARAM_STR);
$preparedStatement->execute();
$resultArr = $preparedStatement->fetchAll();
print_r($resultArr);
$DB->commit();
} catch(\PDOException $ex) {
echo "Seriously bad error. ";
echo $ex->getMessage();
return false;
}