2015-07-13 2 views
0

Я строю простую систему входа. У меня возникают проблемы с получением хэша паролей из базы данных.Не удалось получить результаты из таблицы MySQL с PDO

Это то, что у меня есть:

$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

Возможный дубликат [Получить результаты из MySQL с использованием PDO] (http://stackoverflow.com/questions/13962789/get-results-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; 
    } 
Смежные вопросы