SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.10.2007 18:34:48

Art Em
Участник
Зарегистрирован: 18.09.2007
Сообщений: 14

Косая "\" и как с ней боротся

При в ставке строк содержащих "\" сымволя щитаются как спец, даже если поле блоб. Как это отключить?

Неактивен

 

#2 15.10.2007 18:53:23

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Косая "\" и как с ней боротся

Если Вы работаете из PHP, то можете использовать функцию mysqli_prepare, которая сама вставит содержимое в запрос

Если на уровне SQL, то и символы кавычки расцениваются как закрытие кавычки. Если запрос

Код:

$sql = "INSERT INTO ta (xx, yy) VALUES('$xx', '$yy');"

то в переменных $xx и $yy надо сделать замену \ => \\, ' => \', "=>\"
Это можно сделать функцией addslashes()

Код:

$xx = addslashes($xx)

Неактивен

 

#3 15.10.2007 19:03:55

Art Em
Участник
Зарегистрирован: 18.09.2007
Сообщений: 14

Re: Косая "\" и как с ней боротся

C++ Builder, а  в самом SQL такую функцию не нашел. Т.е. нада самому вставлять?
Или мы не поняли друг-друга.
Я из программы встявляю rtf в таблицу после чего в ней появляются rtf теги с вырезаными "\". как с этим боротся?

Неактивен

 

#4 15.10.2007 19:17:59

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Косая "\" и как с ней боротся

Если Вы передаете SQL-запрос, в котором вставлен rtf как текст, то Вы вставляете фактически бинарный файл внутрь текстового запроса. Естественно, Вам нужно, чтобы внутри rtf не было кавычек, поэтому их заменить надо на \ + кавычка. Слеш становится здесь спецсимволом. Сам слеш должен представляться как \\

Какой Вы библиотекой пользуетесь для отправки SQL-запроса?

Неактивен

 

#5 15.10.2007 19:49:41

Art Em
Участник
Зарегистрирован: 18.09.2007
Сообщений: 14

Re: Косая "\" и как с ней боротся

Спасибо, я понял. У меня обертка для dll. Там точна нет аналогов addslashes(). Все что видел остальное для работы с MySQL для Buildera невероятно агромнайе. Такшо придетса делать ручками.

PS Если знаете посоветуйте компактные либы.

Неактивен

 

#6 15.10.2007 20:06:28

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Косая "\" и как с ней боротся

В принципе нужна реализация str_replace(), а затем
str_replace(s, "\"", "\\\"");
str_replace(s, "'", "\\'");
str_replace(s, "\", "\\");
Если погуглить на str_replace C то там есть несколько реализаций данной функции. Трабл в том, что размер строки увеличивается, поэтому надо предпринимать определенные действия по выделению (и потом освобождению памяти).

Используя CBuilder, можно обойти проблему (правда за счет некой потери скорости, если она здесь важна):
char *s;
...
в s загружается файл
далее:
AnsiString S = AnsiString(s);
S = StringReplace(S, "\"", "\\\"", TReplaceFlags() << rfReplaceAll);
... еще два преобразования
s = S.c_str();

Неактивен

 

#7 15.10.2007 20:08:50

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Косая "\" и как с ней боротся

Вообще в родном MySQL C API есть функция mysql-escape-string

Неактивен

 

#8 16.10.2007 09:51:30

Art Em
Участник
Зарегистрирован: 18.09.2007
Сообщений: 14

Re: Косая "\" и как с ней боротся

Ага. Спасиба. Буду капать.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson