Re: SQL-запрос
От: Softwarer http://softwarer.ru
Дата: 15.02.05 08:31
Оценка: +2
Здравствуйте, albe, Вы писали:

A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).


Ну так зачем делать глупости там, где без них спокойно можно обойтись?

Query.ParamByName ( 'field1' ).AsString := Edit1.Text ;
Query.Open ;


Собственно, благодаря коду типа Вашего в списке известных хакерских приемов и присутствует так называемая SQL Injection.
Re: SQL-запрос
От: gavrilenko_s  
Дата: 15.02.05 09:43
Оценка: -1
>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'

s:= 'update "имя_таблицы" set поле1=''+ QuotedStr(Edit1.Text)+ еще что-то...+'' where условие'


З.Ы. Есть еще ANSIQuotedStr
SQL-запрос
От: albe  
Дата: 15.02.05 08:23
Оценка:
Добрый день!
Такая проблема.
Выполняю такую последовательность
s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(s);
Query1.ExecSQL;

Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
Как обойти?
(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).
Re: SQL-запрос
От: fplab Россия http://fplab.h10.ru http://fplab.blogspot.com/
Дата: 15.02.05 08:28
Оценка:
Здравствуйте, albe, Вы писали:

A>Добрый день!

A>Такая проблема.
A>Выполняю такую последовательность
A>
A>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
A>Query1.Close;
A>Query1.SQL.Clear;
A>Query1.SQL.Add(s);
A>Query1.ExecSQL;
A>

A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
A>Как обойти?
A>(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).
Предваряйте апостроф и кавычки обратным слешем ("\"). Т.е. перед тем как передать строку в SQL ее ее проанализировать и в случае, если в строке есть апострофы и кавычки замените их на \' или \". Если в строке есть сам обратный слеш — удвайваете его (\\). Это т.н. escape-символы
Приходиться заниматься гадостью — зарабатывать на жизнь честным трудом (Б.Шоу)
Re: SQL-запрос
От: Arsu Россия  
Дата: 15.02.05 11:55
Оценка:
A>Добрый день!
A>Такая проблема.
A>Выполняю такую последовательность
A>
A>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
A>Query1.Close;
A>Query1.SQL.Clear;
A>Query1.SQL.Add(s);
A>Query1.ExecSQL;
A>

A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
A>Как обойти?
A>(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).

Вариант 1. (дубовый. но я бы сделал именно так )
s:= 'update "имя_таблицы" set поле1= ''' + double_quote(Edit1.Text + еще что-то...) + ''' where условие'

А double_quote — это ф-ция, которая удваивает каждую кавычку.
Реализация — в качестве упражения

Вариант 2. (от Softwarer'а)

Описан выше.

В качестве иллюстраци sql-инъекции задам вопрос — что будет, если пользователь введет в Edit1
0 drop table "имя_таблицы" --
?
Re: SQL-запрос
От: Hermes Россия  
Дата: 15.02.05 16:38
Оценка:
Здравствуйте, albe, Вы писали:

A>Добрый день!

A>Такая проблема.
A>Выполняю такую последовательность
A>
A>s:= 'update "имя_таблицы" set поле1=''+ Edit1.Text+ еще что-то...+'' where условие'
A>Query1.Close;
A>Query1.SQL.Clear;
A>Query1.SQL.Add(s);
A>Query1.ExecSQL;
A>

A>Если в Edit1.Text присутствует апостроф, то возникает ошибка... Либо непредсказуемый результат (в поле 1 записывается совсем не то).
A>Как обойти?
A>(вариант с заменой ' на " не подходит, в этом случае ругается, если в Edit1.Text будут кавычки).

Не судьба параметрами пользоваться?
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.