PHP: проблема в выражении SQL при использовании строкового параметра - PullRequest
0 голосов
/ 21 февраля 2009
$befal = mysql_query("SELECT * FROM users WHERE username = $_GET[username]");
$rad = mysql_fetch_assoc($befal);

Равно

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\profile.php on line 4

У меня есть пользователь с именем Admin в поле username, и он все еще не работает. profile.php? Пользователь = Админ ...

Это работает, если я использую идентификатор, хотя:

$befal = mysql_query("SELECT * FROM users WHERE user_id = $_GET[id]");
$rad = mysql_fetch_assoc($befal);

В чем может быть проблема?

Спасибо

Ответы [ 3 ]

6 голосов
/ 21 февраля 2009

Errr ... это рецепт для взлома. Я хотел бы познакомить вас с SQL-инъекцией , характеризуемой этим очень забавным, но острым мультфильмом .

Попробуйте вместо этого.

$username = mysql_escape_string($_GET['username']);
$query = mysql_query("SELECT * FROM users WHERE username = '$username'");
3 голосов
/ 21 февраля 2009

Попробуй так:

$befal = mysql_query("SELECT * FROM users WHERE username = '$_GET[username]'");

Вы должны заключить строковый параметр в апострофы.

[UPDATE]

Так же, как указали cletus и Olaf , с приведенным выше оператором sql вы очень склонны к SQL-инъекции . Проверьте их опубликованные ответы, чтобы понять, что я имею в виду.

0 голосов
/ 21 февраля 2009

Теперь, когда вы получили свой ответ, попробуйте ввести

Something' OR '1' = '1

в качестве имени пользователя - вам удалось создать хорошее SQL-инъецируемое приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...