Имя: Пароль:
1C
 
Экранирование символов строки
0 Septera
 
21.12.10
17:22
Делаю запрос в базу MySQL, в запросе создаются позиции номенклатуры, естественно пользователи в справочник Номенклатура наколотили названия как душе угодно и при добавлении некоторых записей возникают ошибки и соединение рвется. Вопрос, кроме перебора символов есть еще какие-то способы избавиться от ненужных символов в строке?
1 Fragster
 
гуру
21.12.10
17:24
в php есть функция mysqli.real_escape_string
2 Septera
 
21.12.10
17:24
(1) Речь об 1С вообще-то =)
3 Fragster
 
гуру
21.12.10
17:25
соответственно, если у тебя на сервере веб-сервис (иль свое АПИ какое другое) на php, который ты дергаешь, а не напрямую вставляешь, то можно заюзать ее
4 Mitriy
 
21.12.10
17:29
(2) "Делаю запрос в базу MySQL, в запросе создаются позиции номенклатуры"... каким боком тут 1С?
5 Septera
 
21.12.10
17:45
(3) промежуточный скрипт это не панацея, слишком громоздко выходит
(4) из 1С соединяюсь с MySQL, что тебе не понятно?
6 Fragster
 
гуру
21.12.10
17:54
(5) 1с напрямую не работает с майэскуэль, соответственно, используется прокладка. может АДО, может ОДБЦ, а может и вебсервис специфический (кстати, вебсервисы позволяют реалтаймовое двустороннее взаимодействие строить)
7 Septera
 
21.12.10
17:58
(6) что ты говоришь!!1!111!!! нет слов одни эмоции =)
Для справки, соединяюсь через драйвер ODBC MySQL.
8 Живой Ископаемый
 
21.12.10
18:03
а стало быть чтобы выполнить mysqli.real_escape_string уже черепушки не хватает... понятно
9 Живой Ископаемый
 
21.12.10
18:03
через тот же ОДБЦ
10 simol
 
21.12.10
18:07
Заменить
11 Fragster
 
гуру
21.12.10
18:12
(10)

ага, первый запрос: delimiter $$
второй запрос: select * from table $$ drop table и все. твое "заменить" идет лесом. а (1) обходит такую проблему
12 simol
 
21.12.10
18:33
(11)
см (0)

Вопрос, кроме перебора символов есть еще какие-то способы избавиться от ненужных символов в строке?
13 Живой Ископаемый
 
21.12.10
18:39
2(12) в предложенном тобой случае разве не будет перебора символов? просто перебираться будут не символы наименования а... анти-эталонные символы.
14 Septera
 
22.12.10
10:50
mysqli - это класс php, зачем он мне нужен, если с таким же успехом я могу сделать перебор в 1С или я чего-то не понимаю?
15 Живой Ископаемый
 
22.12.10
10:52
а функция real_escape_string ее что - тоже нужно вызывать для каждого символа в строке? я просто не в курсе...
===
короче, со строками лучше всего работает регексп это и так понятно и всем известно.. вот и вызывай его на стороне 1С.
16 Septera
 
22.12.10
11:33
real_escape_string вызывается для каждой строки запроса, но факт что работает этот класс только в php, а смысл мне внедрять третье звено в обмен между 1с и php когда есть банальный перебор
17 Живой Ископаемый
 
22.12.10
11:44
не внедряй.
18 Fragster
 
гуру
22.12.10
11:47
(15) не, типа так:

$query = "select * from table where title = ".mysqli->real_escape_string($title);
19 Fragster
 
гуру
22.12.10
11:48
автор, почитай про prepared statements  - походу то, что нужно, и прямо запросами можно юзать, без обвязки на php. только кавычки все равно экранировать надо будет
20 Septera
 
22.12.10
11:53
(19) ок, как решу вопрос отпишу
21 Septera
 
22.12.10
12:17
Решил вопрос банальным перебором:
Процедура ОбработкаСтроки(Наименование)
   Наименование=СокрЛП(Наименование);
   Наименование=СтрЗаменить(Наименование, """", """""");
   Наименование=ВРег(Наименование);
КонецПроцедуры


На выходе красивая строка, минимальная нагрузка на производительность.
22 Fragster
 
гуру
22.12.10
12:33
(21) реальная лажа
23 Septera
 
22.12.10
12:43
(22) обоснуй =)
24 vS
 
22.12.10
12:53
ты же нехотел перебором? :)