mysql ввод с слешом

php MySQL

Доброго времени суток.
На сайте есть запрос на 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) ) {}
}
Ответы:
Надо видеть код, хз как вы обрабатываете запрос.
Не советую заставлять "sql" выдавать ошибки. В данном случае лучше проверить переменные и если они не прошли проверку делать какие либо действия (вывести сообщение и/или внести запись в логи)


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.