Уже устал разбираться с этим вопросом... В общем, пытаюсь защитить запросы к бд, и тут мнения разделяются: одни говорят, что если, например, регистрировать пользователя с логином 1'2'3, то в бд должно быть именно 1'2'3, другие же говорят, что в бд не должно быть кавычек, а должно находиться 1\'2\'3. Кто прав? И как добиться последнего варианта, если он верен? У меня все данные в бд идут через mysql_real_escape_string(), но никаких слешей не добавляется, и при этом я логинюсь под этим пользователем спокойно.
Примечание:
ax64, ну, я то в этом и был уверен, меня просто сбило с толку, что мнения разделились...
Тогда еще такой вопрос... Вот такой вод кодец...
$pid = $_GET['pid'];
$passportdatasearch = mysql_query( "SELECT user_login, user_f, user_i, user_o FROM `users` WHERE `user_ID` = '" . $pid . "' LIMIT 1" );
if( mysql_num_rows( $passportdatasearch ) == 1 )
{
$username = mysql_result($passportdatasearch, $username, user_login);
...
}
если user_login содержит кавычки, то он из базы не достается... пишет:
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 1 on MySQL result index 11 in /home/....../public_html/pass.php on line 7
7-я строчка это:
$username = mysql_result($passportdatasearch, $username, user_login);
То есть, как я понимаю, он встречает кавычку в логине и "спотыкается", как исправить?
Примечание:
Так ведь $pid - это число, оно кавычек не содержит (хотя защитить тоже надо).
Примечание:
>>> в этом случае sql будет искать `user_ID`, соответствующий 1'2'3'
Ненене, что экранировать данные надо, это я знаю, только в данном случае $pid - это число, то есть id юзверя, и ошибка тут не в этом, а именно в той строке, которая задает $username. Там, насколько я понял, надо как-то заэкранировать user_login...
Примечание:
ax64, запрос я изменил:
$pid = $_GET['pid'];
$passportdatasearch = mysql_query( "SELECT user_login, user_f, user_i, user_o FROM `users` WHERE `user_ID` = '" . mysql_real_escape_string($pid) . "' LIMIT 1" );
Тем не менее, ошибка то не в этом сейчас. Из базы достается логин в виде 1'2'3, и, видимо, после 1 натыкается на кавычку и стопорится.
Примечание:
Выводится все правильно:
SELECT user_login, user_f, user_i, user_o FROM `users` WHERE `user_ID` = '22' LIMIT 1
здесь 22 - это id пользователя, НЕ логин. И его экранировать не нужно, хотя защиться экранированием стоит, это я уже сделал. Тут с присвоением проблема:
$username = mysql_result($passportdatasearch, $username, user_login);
Тут user_login = 1'2'3
Примечание:
>> $username = mysql_result($passportdatasearch, $username, 'user_login');
пробовал, аналогично.
Примечание:
$arr = mysql_fetch_assoc($passportdatasearch);
$username = $arr['user_login'];
Вот! Так получилось)
Спасибо огромное за помощь, и простите, что столько времени ушло на решение моей проблемы!)
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.