Php 使用PDO从MySQL表获取结果时遇到问题

Php 使用PDO从MySQL表获取结果时遇到问题,php,mysql,Php,Mysql,我正在构建一个简单的登录系统。我遇到的问题是从数据库中获取密码散列 这就是我所拥有的: $statement = 'SELECT Pass FROM Emails WHERE Email = "?"'; $question = array($email); try { $DB->beginTransaction(); $preparedStatement = $DB->prepare($statement); $prepared

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

这就是我所拥有的:

$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;
    }
我的问题是
$resultar
总是不包含任何元素

我知道SQL查询本身是有效的,因为我已经在MySQL中直接测试了它

我相信我必须使用预先准备好的语句,因为我要向MySQL发送用户输入,并且必须抵御简单的SQL注入攻击

我使用
fetchAll()
来确保给定电子邮件只有一个结果。否则,将会有一个巨大的问题


我的错误是什么?

只是为了清理这个极其多余的代码

$stmt = $DB->prepare('SELECT Pass FROM Emails WHERE Email = ?');
$stmt->execute(array($email));
$pass = $stmt->fetchColumn();
这三行就是运行查询并获得结果所需的全部内容

是的,问题就在于引用?马克


为了确保没有其他电子邮件,您应该在Mysql中使用唯一索引为什么
$question=array($email)?为什么不干脆
$question=$email?是否可能重复删除周围的双引号?
$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;
    }