Спец символы в теле запроса к БД MYSQL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 19:10

Есть вот такой код:
Код: Выделить всё
sql = "SELECT `id` FROM `RECL_addresses` WHERE `name`=""" & Combo1.Text & """;"
org = MySQL.MySQL.Execute(sql)("id")


Его задача получить id записи по полю Name. Используя в качестве параметра строку из combo.

Если в combo будет текст с двойными кавычками - выдаёт ошибку синтаксиса запроса. Как обработать строку или изменить запрос чтобы такого не происходило.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Спец символы в теле запроса к БД MYSQL

Сообщение Хакер » 07.11.2012 (Ср) 19:28

Экранировать. Ты вообще с луны свалился что-ли? Как можно не знать про экранирование.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 19:34

Хакер писал(а):Экранировать. Ты вообще с луны свалился что-ли? Как можно не знать про экранирование.

На PHP вопросов нет. :) Как сделать это на VB не догоняю. Извини конечно что я такой тупой.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Спец символы в теле запроса к БД MYSQL

Сообщение Хакер » 07.11.2012 (Ср) 19:39

Точно так же, как в PHP.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 19:48

Хакер писал(а):Точно так же, как в PHP.

В PHP есть функции специальные для экранирования: mysql_escape_string(). А в VB?
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Спец символы в теле запроса к БД MYSQL

Сообщение Хакер » 07.11.2012 (Ср) 19:55

А в VB нет специальной функции экранирования. Ты её должен написать сам, ибо это архипросто.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 20:01

Хакер писал(а):А в VB нет специальной функции экранирования. Ты её должен написать сам, ибо это архипросто.

В общем нужно написать простейший парсер строки, экранирующий специальные символы. :)
Строка: ОАО "Ижевский мотозавод "Аксион-холдинг" - должна стать такой : ОАО \"Ижевский мотозавод \"Аксион-холдинг\"?
По логике именно такой, но на неё тоже ругается.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Спец символы в теле запроса к БД MYSQL

Сообщение Хакер » 07.11.2012 (Ср) 20:07

Всех, кто говорит «ругается», и не уточняет, какой именно фразой ругается — нужно расстрелять :pig:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 20:10

Хакер писал(а):Всех, кто говорит «ругается», и не уточняет, какой именно фразой ругается — нужно расстрелять :pig:

RUNtime error `3021`

BOF или EOF имеют значение true

Не могёт найти запись я так понимаю.
А всё потому что я забыл, что поставил экранирующие символы в значении поля в самой базе чтоб проверить через combo. Всё заработало. Осталось парсер написать.
Спасибо :D
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Спец символы в теле запроса к БД MYSQL

Сообщение Хакер » 07.11.2012 (Ср) 20:17

В значении поля не должно быть экранирующих символов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 20:37

Вот что получилось:
Код: Выделить всё
Public Function Escape(str As String) As String
   Dim sbuf As String
   Dim res As String
     
     For i = 1 To Len(str)
            sbuf = Mid$(str, i, 1)
            If sbuf = Chr(34) Then sbuf = "\" & sbuf
            res = res & sbuf
     Next i

Escape = res

End Function
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Спец символы в теле запроса к БД MYSQL

Сообщение Хакер » 07.11.2012 (Ср) 21:01

Мозг не хочешь включать.
Фигню написал ты.
Кавычка — не единственный спецсимвол. База после такого таланта, как ты, будет уложена хакером с помощью SQL-инъекции моментально.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 07.11.2012 (Ср) 21:12

Хакер писал(а):Мозг не хочешь включать.
Фигню написал ты.
Кавычка — не единственный спецсимвол. База после такого таланта, как ты, будет уложена хакером с помощью SQL-инъекции моментально.

Я в курсе.
База в локальной сети. Функцию, с учётом всех вариантов, перепишу завтра. Сегодня уже поздно. Мне нужно было понять саму суть процесса. Я её понял. Проверил-работает. Спасибо тебе большое за совет, учту. И спокойной ночи. :thumright:
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Спец символы в теле запроса к БД MYSQL

Сообщение netdemon » 09.11.2012 (Пт) 18:29

Хакер, подскажи какие ещё символы стоит экранировать кроме [%], ["], [ ' ]?
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Спец символы в теле запроса к БД MYSQL

Сообщение FireFenix » 10.11.2012 (Сб) 14:04

Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Спец символы в теле запроса к БД MYSQL

Сообщение iGrok » 10.11.2012 (Сб) 19:07

netdemon писал(а):%

Зачем его экранировать?!

FireFenix писал(а):находим http://dev.mysql.com/doc/refman/5.1/en/ ... tring.html
смотрим что экранирует http://dev.mysql.com/doc/refman/5.1/en/ ... -sequences

Не совсем так. Второй список - это вообще поддерживаемые escape-последовательности.

А вот что экранируется:
http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html писал(а):Characters encoded are “\”, “'”, “"”, NUL (ASCII 0), “\n”, “\r”, and Control+Z
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.11.2012 (Вс) 11:08

iGrok писал(а):
netdemon писал(а):%

Зачем его экранировать?!

На случай like? Но тогда надо не только его... Ну и запрос соответствующим образом составлять.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Спец символы в теле запроса к БД MYSQL

Сообщение iGrok » 11.11.2012 (Вс) 23:57

Qwertiy писал(а):На случай like? Но тогда надо не только его... Ну и запрос соответствующим образом составлять.

На случай like нужно вообще отдельно обрабатывать строки, входящие в like. И строить запрос, да.
А на все остальные случаи % экранировать не только не нужно, но и нельзя.
label:
cli
jmp label


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 32

    TopList  
cron