2015-07-13 38 views
0

我正在構建一個簡單的登錄系統。我遇到的麻煩是從數據庫中獲取密碼哈希。無法從PDO中獲取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()爲了確保給定的電子郵件只有一個結果。否則,將會有一個巨大的問題。

這裏我的錯誤是什麼?

+1

爲什麼'$問題=陣列($電子郵件)使用唯一索引郵件;'?爲什麼不只是'$ question = $ email;'? –

+0

[使用PDO從MySQL獲取結果]的可能重複(http://stackoverflow.com/questions/13962789/get-results-from-from-mysql-using-pdo) –

+1

刪除雙引號? – Hytool

回答

-1

只是爲了清洗這個極其多餘的代碼

$stmt = $DB->prepare('SELECT Pass FROM Emails WHERE Email = ?'); 
$stmt->execute(array($email)); 
$pass = $stmt->fetchColumn(); 

這3條線的緣故是所有你需要運行一個查詢並得到結果。

是的,問題只是引號?標記。

爲了確保沒有其他的你應該在MySQL

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