函数odbc无法读取 - 星号

时间:2013-01-30 11:59:08

标签: mysql odbc sip asterisk

我正在努力从软电话中获取数字然后插入mysql数据库。 所有的司机和东西都可以。我配置他们。我可以选择/轮询我的所有数据。但我无法插入我的新数据。我的func_odbc.conf喜欢那个;

[ADDX];

dsn=asterisk
writesql = INSERT INTO aktarma (musterino,aktartel) values (${VAL1},${VAL2})

和我的extensions.conf是;

exten=>_X.,n(sqlekle),SET(a=${ODBC_ADDX(${digit},${aktartel})})

我检查了我的变量$ {digit}和$ {aktartel}是对的,它给出了错误;

[Jan 30 05:43:21] ERROR[4601]: pbx.c:3380 ast_func_read: Function ODBC_ADDX cannot be read
-- Executing [XXXXXXXXX@phones:30] Set("SIP/out-0000001a", "a=") in new stack

那么朋友们有什么不对。我找不到解决这个问题的方法 非常感谢。

2 个答案:

答案 0 :(得分:1)

已经晚了一年,但我会回答这个问题,以帮助像我一样来自搜索领域的人。

在您的func_odbc.conf中,您尝试编写VAL1VAL2,但实际上您想要使用ARG1ARG2;在随后的拨号方案中,VAL1VAL2未设置(它们位于=之后)

[ADDX]
dsn=asterisk
writesql = INSERT INTO aktarma (musterino,aktartel) values (${ARG1},${ARG2})

在你的拨号方案中,你试图从函数中读取一个只是写入函数的值。您需要在Set命令中使用=以避免错误,但它应该在最后。此函数也不需要包含在${}中以便写入。

exten=>_X.,n(sqlekle),Set(ODBC_ADDX(${digit},${aktartel})=)

关于ARG vs VAL,以下是使用两者的示例:

[ADDX]
dsn=asterisk
writesql = INSERT INTO aktarma SET ${ARG1}='${VAL1}',${ARG2}='${VAL2}'

我们同时使用VAL和ARG;然后把它放在拨号方案中:

exten=>_X.,n(sqlekle),Set(ODBC_ADDX(musterino,aktartel)=${digit},${aktartel})

还有一点需要注意,转义和引用SQL输入总是很好的做法;你永远不知道什么时候有些混蛋会在他的DTMF键盘上按下“A”,只是为了让你保持警惕!在您的查询中使用'${SQL_ESC(${VAL1})}'

关于这是如何工作的文献很少;希望这有助于某人。

答案 1 :(得分:0)

您在分配的左侧部分使用了只写功能。

[PRESENCE]
dsn=mydb
writesql=UPDATE `locationtable` SET `location`=${SQL_ESC(${VAL1})}` WHERE `username`='${SQL_ESC(${ARG1})}'

的extensions.conf:

exten => 1234,1,NoOp(Set and read location)
exten => 1234,n,Set(ODBC_PRESENCE(${EXTEN})=office)