![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
любая последовательность кавычек и символов в добавляемом тексте [MySQL]
Mysql © (2007-05-17 17:35:00)Как их инсертить в таблицу?
Mysql (2007-05-22 20:30:00) [1]
> Itonix © (21.05.07 23:48) [21]
> а не проще ли quotedstr ?
может и проще но надежнее через параметры.
p.s. пробовал через эту функцию - не работает..
Itonix (2007-05-21 23:48:00) [2]а не проще ли quotedstr ?
ANB (2007-05-21 11:46:00) [3]
> Действительно она безопасная? : )
Нет.
Это не раздел "Начинающим".
Верный способо уже указан.
Для глухих повторяю - рация на танке !!! (С) Стырено.
ANTPro (2007-05-21 11:07:00) [4]Вот все запросы работают через эту функцию:
function TDM.SafeSQL(const SQL: string; Field: array of string): string;
var
i, Position, OldPosition, Len: Integer;
Buff: string;
begin
Len := Length(Field);
for i := 0 to Len - 1 do
begin
Field[i] := StringReplace(Field[i], '\', '\\', [rfReplaceAll]);
Field[i] := StringReplace(Field[i], '"', '\"', [rfReplaceAll]);
end;
Buff := SQL;
Result := '';
OldPosition := 1;
for i := 1 to Len do
begin
Position := PosEx('[' + IntToStr(i) + ']', Buff, OldPosition);
Result := Result + Copy(Buff, OldPosition, Position - OldPosition) + Field[i - 1];
OldPosition := Position + Length('[' + IntToStr(i) + ']');
end;
Result := Result + Copy(Buff, OldPosition, Length(Buff) - 1);
end;
---
Действительно она безопасная? : )
ANTPro (2007-05-21 11:05:00) [5]> [17] Desdechado © (21.05.07 11:03)
> У каждой СУБД свои.
MySQL
> [17] Desdechado © (21.05.07 11:03)
> Это единственное верное решение.
Да. Но так не охота переделывать запросы : )
Desdechado (2007-05-21 11:03:00) [6]> Или лучше переделать запросы на использование параметра?
Это единственное верное решение. Причем, в значительносй степени не из-за проблемы служебных символов.
> Какие служебные символе еще существуют
У каждой СУБД свои.
ANTPro (2007-05-21 10:48:00) [7]Какие служебные символе еще существуют, которые не верно обрабатываются? Обработку " и \ я сделал.
ЗЫ: Или лучше переделать запросы на использование параметра?
Виталий Панасенко (2007-05-18 16:06:00) [8]
> Mysql (18.05.07 15:58) [14]
> т.е. в том примере можно писать любое слово после двоеточия?
>
Нет, только после троеточия
Mysql (2007-05-18 15:58:00) [9]т.е. в том примере можно писать любое слово после двоеточия?
Desdechado (2007-05-18 15:27:00) [10]> я че только туда не писал, все равно пашет
Это имя параметра для обращения ParamByName('P0').AsString
Для удобочитаемости кода.
Mysql (2007-05-18 14:07:00) [11]
> Desdechado ©
Пасибо! Разобрался, просто еще не имел дела с параметрическими запросами..
но грубить не надо ;)
есть вопросик (:P0) после двоеточия может быть любое имя (последовательност букв :) ) ?
а то я че только туда не писал, все равно пашет =)
Desdechado (2007-05-17 19:37:00) [12]Мдя, разговор с глухим...
Еще раз - как параметр, а не как значение в запросе:
Query.SQL.Text:='insert into table (pole) values (:P0)';
Query.Params[0].AsString:=твое_чего_не_попадя
Плохиш (2007-05-17 18:48:00) [13]Quotedstr
Mysql (2007-05-17 18:10:00) [14]короче говоря нужно обрабатывать строку заменяя кавычки, чтобы они были нетакие как крайние (те что используются для синтаксиса).
а другой выход есть ?
типа внутренней функции сервера в которой в качестве параметра есть добавляемый текст и он его вставляет без ругни ?
вроде этого:
str_function(aaaa"bbb'ccc'ddd""" ''');
Val (2007-05-17 17:59:00) [15]согласен с сервером.
если так попробовать:
как параметр.
в общем, знак препинания можете выбирать любой.
Mysql (2007-05-17 17:59:00) [16]сама строка должна заключаться в кавычки или одинарные млм в двойные - но в ней внутри могут быть и те и те кавычки.. вот тут возникает ошибка..
Mysql (2007-05-17 17:57:00) [17]insert into table (pole) values ("aadasaasdasdas")
так ок
insert into table (pole) values ("aadas"aasdasdas")
а тка ругается:You have an error in your SQL syntax;
Johnmen (2007-05-17 17:55:00) [18]как параметр!
Val (2007-05-17 17:48:00) [19]все такие последовательности инсертят. давайте лучше о ругани сервера.
Mysql (2007-05-17 17:47:00) [20]т.е. как мне эту любую последовательность букв и символов нисертить чтобы сервер не ругался..