Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование одинарных кавычек ( ' ) в mdb + SQL-запросы / 14 сообщений из 14, страница 1 из 1
13.07.2011, 05:17
    #37349045
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
Проблема что называется "не ждали".
Информация типа "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
13.07.2011, 08:10
    #37349089
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
Поскольку в mdb, то ответ здесь - http://www.sql.ru/faq/faq_topic.aspx?fid=157 2. Использование строк
...
Рейтинг: 0 / 0
13.07.2011, 13:26
    #37349652
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
мона и правда просто заменить на пробел или лучше пустую строку. от The Vasja не убудет, а в почтовых адресах вроде изначально незя юзать эту ковычку и остальные символы, из-за которых может произойти путанница. т.е. врят ли найдётся почта the'Vasja@bossserver.com
...
Рейтинг: 0 / 0
13.07.2011, 13:47
    #37349720
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
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
13.07.2011, 14:00
    #37349746
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
Подозреваю что в мыле то как раз это очень даже и может быть использовано.Для этого должны столкнуться лбами три дурака — пользователь, юзающий апострофы в адресе, и разработчики почтового клиента и почтового сервера, не пресекающие это дело. И даже в этом случае остальные, умные почтовики, уважающие rfc, будут резать письма с кривыми адресами, даже если кривой клиент распространился далее чем на компьютер своего разработчика. В общем, такая ситуация не жизненна.
...
Рейтинг: 0 / 0
13.07.2011, 14:09
    #37349767
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
Дмитрий77,

вы правы, только что послал этому зевасе письмо, ограничений нет, значит такая почта вполне может существовать. но это редкость, т.к. большинство людей пользуется стандартными массовыми почтовиками(майл, рамблер, яндекс), которые запрещают использовать эти знаки. большинство бесплатных сайтов также запрещают использовать некоторые символы. насчёт французов хз, не пробовал, не знаю
...
Рейтинг: 0 / 0
13.07.2011, 16:05
    #37350125
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
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
13.07.2011, 17:12
    #37350287
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование одинарных кавычек ( ' ) в mdb + SQL-запросы
Дмитрий77И очень надеюсь что правильно сделал, и еще буду проверять в других компонентах проги.
Да, правильно.
Обращение к любому текстовому значению в запросе, которое содержит не подконтрольные проге данные, должна обязательно содержать удвоение апострофов или кавычек (кто чем пользуется).

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

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

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

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

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


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