Доброго времени суток.
На сайте есть запрос на id записи..
Он выглядит так:
$act = таблица
$req = запрос
$sql = mysql_query( "SELECT * FROM `$act` WHERE `id` = '$req' ORDER BY `release_date` ASC LIMIT 0, 1 " );
Сегодня нашел очень пренеприятный баг..
Если ввести запрос:
site.com/post/1/qwertyuio/ и.т.д.
В sql отправляется $req = 1/qwertyuio
Такого id нету :)
Почему и как избавиться если в запросе есть "/" ?
Примечание:
Как заставить sql выдавать ошибку при вводе запроса
id='1/12312312e/d23'
То она понимает что он нее требуют id=1, а не '1/12312312e/d23'
Примечание:
Всем спасибо за ответы:
Так как у меня структура строки запроса скажем "многофункциональная" и к разным таблицам подключается.
По поводу ошибки, а как же без нее ? )
Данном случае строку запроса разбиваю на 2 части.
$act = действие( таблица )
$req = запрос..
Выглядит это так:
site.com/post/1/
$act = post ;
$req = 1 ;
Соответствино:
$sql = mysql_query( "SELECT * FROM `$act` WHERE `id` = '$req' " );
if ( mysql_num_rows($sql) ) {
// все хорошо
} else {
// все плохо :)
}
При запросе:
site.com/post/1/123abc/
получаю
$act = post ;
$req = 1/123abc ;
и в sql идет
`id` = '1/123abc'
она понимает что от нее хотят 1, а остальное она просто игнорирует....
получается
что site.com/post/1/ и site.com/post/1/123abc/ одно и тоже...
беда...
так как во втором случае не возникает ошибки что данного "id" не существует...
if ( mysql_num_rows($sql) ) {} else {}
не срабатывает ))
Решил проблему просто гениально ( как нуб ) ...
$sql = mysql_query( "SELECT * FROM `$act` WHERE `id` = $req " );
Просто где id = $req убрал кавычки и все... заработала )
Примечание:
Epsiloncool, дело не в том как обрабатываю, а в том что запрос к sql в полу id пишется 1/123abc
sql игнорирует все что после слеша и понимает что от нее хотят только первую часть ( 1 )..
И из за этого sql открывает его как id = 1 а запрос то другой....
Примечание:
Забыл добавить, да бы при вводе 1/123abc когда нету кавычек у WHERE `id` = $req
mysql_num_rows($sql) будет выдавать ошибку, мол сломано у вас все..
Перед ним нужно поставить проверку:
$sql = mysql_query( "SELECT * FROM `$act` WHERE `id` = $req " );
if ( $sql != false ) { // << если массив $sql не лож продолжается веселье
if ( mysql_num_rows($sql) ) {}
}
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.