Строковое значение с апострофом в переменном адресе электронной почты PHP, mysql select - PullRequest
0 голосов
/ 08 февраля 2010

У меня есть адрес электронной почты mike.o'malley@stack.com, который хранится в опубликованной переменной, и я хочу, чтобы в mysql было указано утверждение select для проверки существования адреса электронной почты и получения пароля из моей таблицы.Мой запрос застревает на апостофе, когда пытается выполнить.например, "ВЫБЕРИТЕ pwd ОТ tbl_users, ГДЕ userName = '$ email'";

Ответы [ 3 ]

1 голос
/ 08 февраля 2010

Вы должны использовать mysql_real_escape_string , чтобы заключить значение в кавычки. Фактически, вы должны использовать его каждый раз, когда вы вставляете значение в запрос, если вы этого не делаете, вы не только открыты для ошибок, но и для SQL-инъекции .

Вы должны использовать это так:

if ( get_magic_quotes_gpc() ) {
    $email = stripslashes($email);
}
$quoted_email = mysql_real_escape_string($email, $db_connection);
$query = "SELECT pwd FROM tbl_users WHERE userName='".$quoted_email."'";

Edit: Если в PHP есть магические кавычки, все значения суперглобальных значений (значения в $ _GET, $ _POST, ...) заключаются в кавычки добавочные косые черты , что отстой. Вы должны рассмотреть его отключение.

0 голосов
/ 08 февраля 2010

Как насчет упаковки $ email в mysql_real_escape_string PHP? Хорошей идеей является очистка всего вашего пользовательского ввода ..

http://us.php.net/manual/en/function.mysql-real-escape-string.php

EDIT:

Майк "\" - это экранирующий символ MySQL. Вот документация MySQL 5.0 для строк .

mysql_real_escape_string правильно экранирует адрес электронной почты как mike.o \malmal@stack.com. Вот полный пример:

// Connect
$link = mysql_connect('localhost', 'simeon', 'password')
    OR die(mysql_error());

$db_selected = mysql_select_db('db', $link);

$email = "mike.o'malley@stack.com";
// Query
$query = "SELECT email FROM users WHERE email='".mysql_real_escape_string($email)."'";

$result = mysql_query($query);   

while ($row = mysql_fetch_assoc($result)) {
    echo 'email: '.$row['email']."\n";  // email: mike.o'malley@stack.com
} 
0 голосов
/ 08 февраля 2010

Используйте mysql_real_escape_string, например:

$email = mysql_real_escape_string($email);

Обратите внимание, что это следует делать независимо от использования переменных строк в неподготовленном SQL для предотвращения уязвимостей внедрения SQL.

...