кавычки в запросе к MSSQL

  • Автор темы evgeniy
  • Дата начала

evgeniy

Guest
кавычки в запросе к MSSQL

есть переменная $var="что то ищем да вдобавок кавычка одинарная' ";
$query="SELECT * FROM table WHERE field1 LIKE (' ".$var." ')";
естественно при таком запросе выдается ошибка что одинарная кавычка не закрыта.
помню для MySQL на перле было что то вроде такого INSERT INTO table VALUES(?,?) и вместо ? подставлялись значения переменных из какого нибудь массива( ну я так понимаю передавались значения по адресу(ссылке) переменных а не по значению)..
Если кто сталкивался, киньте пожалуйста пример запроса, как избежать подобных ошибок.
(такие варианты как добавление управляющих символов при помощи ESCAPE не хотелось бы использовать).
:confused:
 

saa

Guest
evgeniy, одинарные кавчки не должны попадать в переменные фигурирующие в запросе, иначе возможна атака типа SQL injection. Поэтому обычно делают addslashes(), чтобы заэкранировать кавычки. Обрати, так же внимание на magic_quotes, а то заэкранируются слеши.
 

evgeniy

Guest
2saa

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

-~{}~ 06.08.04 12:28:

а..ну и аддслэшес вообще сюда негодится потому что в запрос попадет строка \' а это разные строки для запроса лайк
то есть LIKE (' FF' ')<>LIKE('FF\'')
 

Фанат

oncle terrible
Команда форума
насчет MSSQL не знаю, но для mysql написано тут:
http://phpfaq.ru/slashes
в частности, про то, что твоя проблема с лайк - выдуманная
 

evgeniy

Guest
$db = new COM("ADODB.Connection");
$dsn = "DRIVER={SQL Server}; SERVER={servak};UID={sa};PWD={pasw}; DATABASE={DB}";
$db->Open($dsn);

$LIKE="LIKE('".addslashes($FLD1)."')";
$Q="SELECT * FROM table WHERE FLD1 ".$LIKE." FOR XML AUTO";
$rs = $db->Execute($Q);

т.е я использую сервер не май скуэл а MSSQL SERVER
и соединяюсь через ODBC
а в данном случае аддслэшес передает свои слэши как ни в чем не бывало.

-~{}~ 06.08.04 12:47:

а баг с кавычками одинарными веселый:))очень понравился:))ну а как тогда искать значения с одинарными кавычками?
 

saa

Guest
evgeniy, насчет MSSQL(мне превиделось MYSQL :)) сказать не могу. Случаем их(кавычки) там не надо просто удваивать?
 

evgeniy

Guest
нет..удваивать нельзя ...так было бы легко конечно:))
 

evgeniy

Guest
1
SELECT *
FROM table
WHERE (field LIKE 'Фамил''ия')

2
SELECT *
FROM table
WHERE (field LIKE 'Фамилия')

если между этими двумя запросами нет разницы, то я вообще молчу..где вам оно помогает- ума не приложу..явно не для MSSQL Server
 

Yukko

Новичок
если между этими двумя запросами нет разницы, то я вообще молчу..
Если нужно в базе найти слово
О'рейли
то пишется запрос:

SELECT *
FROM table
WHERE (field LIKE 'О''рейли')

если в базе нужно найти слово
Пупкин
то пишется запрос:
SELECT *
FROM table
WHERE (field LIKE 'Пупкин')

чтобы сделать все это универсальным пишем:
$ query = "SELECT *
FROM table
WHERE (field LIKE '".str_replace("'", "''", $data); ."')";
Понятно, надеюсь?
 

fixxxer

К.О.
Партнер клуба
В MSSQL кавычка экранируется не \', а ''.
Можно
а) делать замену вручную
б) включить в инишнике magic_quotes_sybase, при этом правило замены кавычки меняется на '' - как для addslashes, так и для magic_quotes_gpc - то есть полностью применим faq slash. Конечно, если в скрипте используются одновременно mysql и mssql, то придется выбрать первый способ
 

Yukko

Новичок
не хотел я про magic_quotes_gpc и magic_quotes_sybase говорить... да ладно, коли уже сказал. Потом просто люди начинают думать, что
а баг с кавычками
решается через magic_quotes_sybase, а не через простое удвоение кавычек.
 
Сверху