1

我有一个 ODBC 函数,它从我的数据库中提取多个值并将它们存储在一个变量数组中。后来在拨号方案中我使用了那个变量,但是所有的双引号都被删除了——单引号没有被触及。如果我将值直接存储到变量(而不是数组)中,则会保留引号,但是逗号分隔的字符串当然不是很有用。

拨号方案:

exten => 123,1,Set(ARRAY(FOO,BAR)=${MY_FUNC()})
exten => 123,2,NoOp(The value is now '${FOO}')
exten => 123,3,Set(FOO=${MY_FUNC()})
exten => 123,4,NoOp(The value is now '${FOO}')

输出:

Executing [123@mycontext:1] Set("SIP/7040-0000105b", "ARRAY(FOO,BAR)=I am "testing" it,23") in new stack
Executing [123@mycontext:2] NoOp("SIP/7040-0000105b", "The value is now 'I am testing it'") in new stack
Executing [123@mycontext:3] Set("SIP/7040-0000105b", "FOO=I am "testing" it,23") in new stack
Executing [123@mycontext:4] NoOp("SIP/7040-0000105b", "The value is now 'I am "testing" it,23'") in new stack

我尝试将函数调用用引号括起来,我尝试在数据库级别添加反斜杠前缀。似乎没有任何效果,它们总是被删除。

按照下面的建议使用HASH不会改变任何东西:

exten => 123,1,Set(HASH(FOO)=${MY_FUNC()})
exten => 123,2,NoOp(The value is now '${HASH(FOO,data1)}')

输出:

Executing [123@mycontext:1] Set("SIP/7040-00002bf9", "HASH(FOO)=I am "testing" it,23") in new stack
Executing [123@mycontext:2] NoOp("SIP/7040-00002bf9", "The value is now 'I am testing it'") in new stack

将数据存储在数组中不是必需的,但我从数据库中提取多个值并且需要在不破坏值的情况下访问它们,并且不诉诸多个函数,每个函数都提取一个值。

4

1 回答 1

0

Func_ODBC 设计用于与 HASH 函数一起使用。

func_odbc.conf: [FOO]dsn=mysql readsql=SELECT * FROM foo WHERE somefield='${SQL_ESC(${ARG1})}'</p>

extensions.conf: 设置(HASH(foo)=${ODBC_FOO(${bar})})

现在您可以引用 ${HASH(foo,somefield)} 或 ${HASH(foo,someotherfield)}。您甚至可以通过以下方式将内容添加到 HASH foo:

设置(哈希(foo,notinthetable)=baz)

https://www.voip-info.org/asterisk-func-hash/

于 2019-12-06T09:22:27.387 回答