|
v7: Как лучше экранировать MySQL запрос
formista2000, AlexKimp, Ager, arsik, Андрей_Андреич, trdm, ЯнСмит, qsunnx, trad, MM, sysadminlk, Builder, laeg, Волшебник, Karamzin, Ал_Ив, Djelf, s_trikozin, vbus, mmg, yurikmellon2, Guk, mikecool, denk32, Pprog151713, zenik, Смотрящий, skafandr, Мультук, Ivanich, Mihasya, Кукуев, Irbis, lxndr, obs191
| ☑ |
0
sysadminlk
08.10.24
✎
06:54
|
db = СоздатьОбъект("ADODB.Connection");
db.Open("driver={MySQL ODBC 5.1 Driver}; server="+ИпСервера+"; uid="+userid+"; pwd="+password+"; database="+database+"; port=3306; STMT=SET CHARACTER SET cp1251");
Сообщить(db.State);
str = "Patrick O'Reilly";
qString = db.qStr(str);
SQL = "SELECT * FROM names WHERE name="+qString+"";
Сообщить(SQL);
db.Close();
db="";
1
qString = db.qStr(str);
{D:\ДЛЯТЕСТОВ.ERT(51)}: ADODB.Connection: Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
|
|
1
formista2000
08.10.24
✎
07:51
|
Что значит "экранировать запрос"? О.о
|
|
2
AlexKimp
08.10.24
✎
08:02
|
|
|
3
AlexKimp
08.10.24
✎
08:02
|
(2)+
ну там СтрЗаменить спец символы на экраны.
смотря, какие данные можем ожидать.
конкретно с товарищем ирландцем можно в запросе параметр обернуть не в ', а в ", тогда экран для ' в фамилии не потребуется
|
|
4
Волшебник
08.10.24
✎
08:02
|
(2) сработает ли на имени? Patrick O'Reilly
|
|
5
Волшебник
08.10.24
✎
08:03
|
(3) А что если там будет другая фамилия, например, Doctor "Who"
|
|
6
AlexKimp
08.10.24
✎
08:12
|
(5) вот поэтому я и указал пункт "смотря, какие данные можем ожидать". разумеется, предварительная обработка параметров на предмет экранирования спецсимволов предпочтительнее
|
|
7
sysadminlk
08.10.24
✎
09:06
|
Функция СтрMySQL(Вход)
Истина=-1;
Ложь=0;
RegExp = CreateObject("VBScript.RegExp");
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим
RegExp.Pattern = "(')|(\\)";
Возврат RegExp.Replace(Вход, "\$&");
КонецФункции
По идее как-то так тогда должно работать
|
|
8
AlexKimp
08.10.24
✎
10:00
|
(7) Да, и не забыть в кавычки - одинарные или двойные - обернуть строковые параметры. и литералы типа дата тоже (не уверен, нет времени глянуть, дата вродь ток в одинарные. но это не точно).
|
|