powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
14 сообщений из 14, страница 1 из 1
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37349045
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема что называется "не ждали".
Информация типа "String" может быть типа COMPANY INT ' L
Соответственно подпав под код типа
Код: plaintext
1.
the_str="COMPANY INT'L"
adoConn.Execute ("UPDATE table SET " & SQLString & " WHERE MyField='" & the_str & "'")
вылетит с ошибкой

Syntax error (missing operator) in query expression "COMPANY INT'L",next field='lala......

Использовать одинарную кавычку логически не запрещено, запретить я это вообще не могу, ибо инфо для поля берется вообще из внешнего источника.
Пофиксил пока путем замены ' на пробел при исходном считывании, но чувствую что это лажа и может стукнуть в любом месте.
Потому как например если the'Vasja то от the Vasja не убудет, а если это mailto:the'Vasja@bossserver.com, то "the Vasja" черта с два получит этот mailto при таком методе затыкания.

Т.е. как грамотно это лечить?
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37349089
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку в mdb, то ответ здесь - http://www.sql.ru/faq/faq_topic.aspx?fid=157 2. Использование строк
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37349652
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мона и правда просто заменить на пробел или лучше пустую строку. от The Vasja не убудет, а в почтовых адресах вроде изначально незя юзать эту ковычку и остальные символы, из-за которых может произойти путанница. т.е. врят ли найдётся почта the'Vasja@bossserver.com
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37349720
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world,

Вы вот на это намекаете?

Код: plaintext
1.
2.
Public Function DblApo(the_str As String) As String
    DblApo = Replace(the_str, "'", "''")
End Function

И использовать везде, где составляются SQL-expressions c конструкциями
Код: plaintext
"field='" & func(a,...) & "'"
=> замена на
"
Код: plaintext
field='" & DblApo(func(a,...)) & "'"
Так? Подвоха нигде нету?
===
> а в почтовых адресах вроде изначально незя юзать эту ковычку и остальные символы
мало чего в RFC написано. Дураками одинаково могут быть и программисты, и пользователи. Подозреваю что в мыле то как раз это очень даже и может быть использовано. Отклонение от стандартов не должно являться поводом для вылета проги.
Если в русском апостроф обычно не используют, то для француза это милое дело.
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37349746
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю что в мыле то как раз это очень даже и может быть использовано.Для этого должны столкнуться лбами три дурака — пользователь, юзающий апострофы в адресе, и разработчики почтового клиента и почтового сервера, не пресекающие это дело. И даже в этом случае остальные, умные почтовики, уважающие rfc, будут резать письма с кривыми адресами, даже если кривой клиент распространился далее чем на компьютер своего разработчика. В общем, такая ситуация не жизненна.
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37349767
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

вы правы, только что послал этому зевасе письмо, ограничений нет, значит такая почта вполне может существовать. но это редкость, т.к. большинство людей пользуется стандартными массовыми почтовиками(майл, рамблер, яндекс), которые запрещают использовать эти знаки. большинство бесплатных сайтов также запрещают использовать некоторые символы. насчёт французов хз, не пробовал, не знаю
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37350125
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyпользователь, юзающий апострофы в адресе, и разработчики почтового клиента и почтового сервера, не пресекающие это дело. И даже в этом случае остальные, умные почтовики, уважающие rfc, будут резать письма с кривыми адресами, В общем, такая ситуация не жизненна.
По крайней мере правильно получить отбой (в логе) от "умного почтовика, уважающего rfc"
а не crash моей программы от некорректного SQL запроса. Не так ли?

В моем случае удаленный (не юзающий прогу человек) в идентификаторе своего факса FaxID написал именно типа
COMPANY INT'L
-название своей компании и имел на это полное право. И моральное, и согласно RFC для FaxID. Он дурак? Думаю нет.
Прога эту строку залогировала в БД, и при след. запросе тупо использовала WHERE ...field = 'COMPANY INT'L'. И соотв. вылетела.
Причем, будучи запущенной как "сервис NT" (естественно через 3D-сторонний компонент, не самому же сервисы на VB писать), на экран ничего не выдавала. И спасибо кастомеру, что пустил меня через RDP "глянуть на ето" и у меня хватило мозгов понять причину.

Можно конечно искажать данные пробелами или пустыми местами. Но во-первых, это свинство - искажать название компании, а
во-вторых, заранее неизвестно на какого дурака/не дурака, на какое RFC, и в каком поле нарвешься.

Посему таки потратил время и во всех запросах и местах поменял str на DblApo(str), даже там где ' по определению не может быть.
И очень надеюсь что правильно сделал, и еще буду проверять в других компонентах проги.
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37350287
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77И очень надеюсь что правильно сделал, и еще буду проверять в других компонентах проги.
Да, правильно.
Обращение к любому текстовому значению в запросе, которое содержит не подконтрольные проге данные, должна обязательно содержать удвоение апострофов или кавычек (кто чем пользуется).

Кстати, на этой ошибке программиста часто основан взлом методом инъекций - слыхал о таком?
То бишь кто-то умышленно вносит в тот же email апостроф, а после него несколько sql-команд. Например DROP DATABASE. Твоя прога ничтоже сумняшеся выполняет этот запрос и ОПА!
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37350292
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое правильное это добавлять/редактировать данные через рекордсет.
rs("field").value = стопицотапострофов и нулевая вероятность нарушения синтаксиса.
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37350436
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. в качестве решения решили заменить не одинарные ковычки в названии компании, а ковычки-границы в текстовом поле? или я неправильно понял... например, 'the'vasja' заменили на '''the'vasja''' ? но тада ведь при имени the'''vasja в поле '''the'''vasja''' тоже будет ошибка...
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37350442
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: BelowZero
> или я неправильно понял...

Да. Правильно использовать параметры, тогда нет головной боли с спец-символами

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37351231
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСамое правильное это добавлять/редактировать данные через рекордсет.
rs("field").value = стопицотапострофов и нулевая вероятность нарушения синтаксиса.
Раньше я только так и делал, ибо по-другому не умел.
Видите ли, в моем случае это означает еще раз сесть и переписать все управление данными.
Я имплементировал БД и решил использовать SQL-запросы + execute (спасибо Shocker.Pro, подсказал про execute).
Я думаю фикса с удвоением кавычек достаточно.
Особенно если учесть что проблема всплыла лишь через 3 месяца после релиза с указанной ошибкой, т.е. вероятность "столкновения 3-х дураков" действительно ничтожно мала. Но тем не менее столкновение наконец произошло, следствие было проведено и открученная гайка найдена и приварена.
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37352834
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всетаки потратьте время и перепишите через параметры
а то есть такое понятие как SQL-injection
если продукт коммерческий, то это плохо
...
Рейтинг: 0 / 0
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
    #37352981
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

у меня в БД секретностей нет. Она используется исключительно для удобства как компонент проги и на локальном компе, в ней нет и по определению не может быть "секретных данных". Раньше вообще использовались txt-файлы.
Вылет программы из за досадной ошибки с апострофом- плохо.
А чего ради городить огород?
И потом я достаточно долго боролся с синхронным обновлением базы (динамика критична), я не уверен что если я напереписываю коды, то не придется опять сидеть и "фиксить" кучу других неинтересных (но критичных для проги) проблем. Оно мне надо?

Мне гораздо более важно внедрять новые идеи и ф-ции за кот. люди готовы платить.
Ну да, всякие стили и внешний вид также важны, изуродованная VB6-256цветная классика негативно действует на психику юзера на win7 или висте, но вроде основные приемы освоили (и продолжаем осваивать).
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]