Всем привет!Вопрос к знатокам и сочувствующим. Есть такая несложная конструкция в диалплане:
exten => 123,1,DumpChan()
same => n,Exec(${ODBC_reserv()})
func_odbc.conf:
[reserv]
dsn=reservdb
readsql=SELECT dial
from dial where number
='${EXTEN}}'
Таблица mysql:
id number dial
1 123 Goto(test,test123,1)
Запрос проходит, все отлично. Но Астериск получает из БД
Goto(test\,test123\,1)
Естественно с косыми чертами никакого контекста нет и мы никуда не переходим. В связи с этим вопрос - откуда эти черты берутся?И как убрать?
В БД записываю INSERT - все стандартно. Попробовал простым bash скриптом делать выборку - скрипт возвращает все нормально, без косых черт. Ощущение что это сам Астериск добавляет эти линии. Пробовал экранировать в запросе это поле кавычками но все равно добавляется... Может кто сталкивался. Спасибо.
Задан: Nov 14 '18
Просмотрен: 339 раз
Обновлен: Nov 15 '18
Переадресация с помощью ODBC, MariaDB
Asterisk 13.14 - Memory Allocation Failure in function ast_str_make_space [закрыт]
Астериск 1.4 Дружба CDR mysql + VM ODBC = миф?
Asterisk+ODBC+MySQL переподключение
Практическое преимущество ODBC
Вычисление значения переменных в Asterisk
Запись в MySQL номера оператора ответившего на звонок [закрыт]
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
хорошим тоном использовать в odbc запросе конструкцию SQL_ESC() .
zzuz (Nov 14 '18)edit[reserv]
dsn=reservdb
readsql=SELECT
dial
from dial wherenumber
='${SQL_ESC(${EXTEN})}'Сразу попробовал так, когда столкнулся с этим багом..все также.
Rockast (Nov 15 '18)editтогда меняйте подход.
zzuz (Nov 15 '18)editТоже примерно так пробовал... Переменная dial в таком случае тоже имеет вид - Goto(test\,test123\,1) То есть функция ODBC уже вытягивает из БД данные в таком виде Goto(test\,test123\,1) Вне зависимости от того какой переменной их присвоить и т.д....
Rockast (Nov 15 '18)editНу тогда по хардкору
zzuz (Nov 15 '18)edit${REPLACE(${dial},"\,",",")}
Офигенно вы пишите. Неэкранированный запрос и сразу его в exec, ага. Шикарно, я считаю.
meral (Nov 15 '18)editПодскажите,как правильно сделать в таком случае? Уже не первый раз сталкиваюсь с такими "фишками" Астера... Когда какая-то функция берет данные, например из БД, по одной ей ведомой логике..
Rockast (Nov 22 '18)editВам выше написали как. Правильно - спросить того дятла, который придумал "какого *я". И переписать полностью. Вы задолбаетесь баги в таком "решении" вылавливать в production.
meral (Nov 23 '18)editЭто не "фишки астера", это способности "разработчика". Правила же не дураки придумали. БД не должно содержать куски следующего уровня(диалплан), нужно разделять.
meral (Nov 23 '18)editВот представим ситуацию. У вас в БД записана команда с маааленькой ошибкой, изза чего она не выполняется. Как вы думаете, какой будет результат? Как вы это отследите? Особенно если в выражении были переменные.
meral (Nov 23 '18)edit