2013-04-02 3 views
-1

Я пытаюсь сравнить адрес электронной почты, хранящийся в базе данных для одного введенных на входе, однако он не признающий:PHP Сравнения Письма

Я пытаюсь выбрать Колум из моей БД с:

$query = mysql_query("SELECT * FROM `men` WHERE `Email`=$user_email"); 

однако запрос возвращает 0, хотя письма точно совпадают. В чем проблема?

+5

use 'Email' =' '$ user_email'' – 2013-04-02 21:10:37

+1

Для любви ко всему, что свято, пожалуйста, не используйте функции mysql_. используйте PDO или mysqli! –

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются, и на нем начался процесс [устаревания] (http://j.mp/Rj2iVR). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – cmbuckley

ответ

2

Есть много проблем. Этот запрос будет интерполировать на Email = [email protected], который является синтаксической ошибкой в ​​MySQL.

  • Вы должны проверять наличие ошибок после mysql_query с чем-то вроде mysql_query($query) or echo mysql_error()
  • Вам нужно обернуть $user_email в кавычках, так что интерполяция для Email = '[email protected]', что является действительным/нужным запрос.
  • Вы вообще не должны использовать ext/mysql; он устарел. См. Большую розовую коробку.
  • Ваш код уязвим для инъекций, потому что запрос не параметризирован правильно.

Гораздо лучше альтернативы можно было бы (в PDO):

$query = $pdo->prepare("SELECT * FROM `men` WHERE `Email` = ?"); 
$query->execute(array($user_email)); 
$result = $query->fetch(); 

Обратите внимание, что мои комментарии по поводу проверки ошибок и параметрирования до сих пор относятся к PDO.

Смежные вопросы