无法从带有PDO的MySQL表中获取结果

时间:2015-07-13 05:17:35

标签: php mysql

我正在构建一个简单的登录系统。我遇到的问题是从数据库中获取密码哈希。

这就是我所拥有的:

$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()以确保给定电子邮件只有一个结果。否则,会有一个很大的问题。

我的错误是什么?

2 个答案:

答案 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;
    }