Вычитал на одном форуме, что избегания попадания кавычек из БД, лишь прибегать к функции StringReplace
и иного пути, какого-нибудь хитрого экранирования, я не нашёл.
Пример:
ADOQuery2.SQL.Add('SELECT `number`, `family`, `name`, `patronymic`, `job` ');
ADOQuery2.SQL.Add('FROM `users` ');
ADOQuery2.SQL.Add('WHERE `job` = :job ');
ADOQuery2.Parameters.ParamByName('job').Value:= Edit1.text; //тут попадают кавычки.
Естественно ошибка.
Пример рабочего запроса в mySQL выглядит так:
WHERE `job` = 'Детский Сад "Солнышко"'
Предлагали сделать такое:
ADOQuery2.Parameters.ParamByName('job').Value:= StringReplace(Edit1.text, '"', '""', [rfReplaceAll]);`
Но не помогло, так как в запрос идёт уже две кавычки.
Вопрос в том, как "обернуть", оформить вот такой рабочий запрос, из кода Dephi?
WHERE `job` = 'Детский Сад "Солнышко"'
Заранее благодарю за внимание к вопросцу.
Попробуйте функцию QuotedStr
или AnsiQuotedStr
из стандартного модуля SysUtils
. Они как раз для этого и предназначены.
A Quote character is inserted at the beginning and end of S, and each Quote character in the string is doubled. To remove the quotes from a quoted string, use the AnsiDequotedStr routine.
На выходе функции получится такая строка:
Детский Сад "Солнышко" -> "Детский Сад ""Солнышко"""
Странно, prepared statements должны работать без экранирования. Одну кавычку можно заменить тремя, тогда должно работать.
ADOQuery2.Parameters.ParamByName('job').Value:= StringReplace(Edit1.text, '"', '"""', [rfReplaceAll]);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Объясните как работает этот алгоритм ибо хорошей, понятной информации по этому алгоритму я не нашелВсе описывают в математических формулах,...
Пытаюсь понять как преобразовать данные для прорисовки эллипса из svg к виду для прорисовки в addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle)Все...