我正在努力从软手机获取号码,然后插入MySQL DB。所有的司机和东西都还可以。我配置它们。我可以选择/轮询我的所有数据。但是我无法插入新数据。我的func_odbc.conf喜欢这样;
[ADDX];
dsn=asterisk
writesql = INSERT INTO aktarma (musterino,aktartel) values (${VAL1},${VAL2})
我的扩展名是 ;
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
那么朋友有什么错。 我找不到解决这个问题的方法多谢。
晚了一年,但我要回答这个问题,以帮助任何像我一样来自搜索土地的人。
在你的func_odbc.conf中,你试图写VAL1
和VAL2
但实际上你想使用ARG1
和ARG2
;在下面的拨号计划中,没有设置VAL1
和VAL2
(它们会在=
之后出现)
[ADDX]
dsn=asterisk
writesql = INSERT INTO aktarma (musterino,aktartel) VALUES (${ARG1},${ARG2})
还有一点需要注意的是,转义并引用你的SQL输入总是很好的做法;你永远不知道什么时候某个混蛋会在他的DTMF键盘上按"A",只是为了让你保持警惕!在查询中使用'${SQL_ESC(${ARG1})}'
:
INSERT INTO aktarma (musterino, aktartel) VALUES ('${SQL_ESC(${ARG1})}', '${SQL_ESC(${ARG2})}')
转到拨号计划:您正在尝试从函数中读取一个值,该函数只是一个写入函数。即使你没有读取值,你仍然需要在 Set 命令中有一个=
以避免错误,但它应该在最后。此外,该函数不需要包装在${}
中即可写入。
exten=>_X.,n(sqlekle),Set(ODBC_ADDX(${digit},${aktartel})=)
关于 ARG 与 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})
因此,ARGx
作为参数传递给函数,而VALx
则位于Set
调用的右侧。
关于它是如何工作的文档很少;希望这对某人有所帮助。
你在 assigment 的左侧使用了只写函数。
[PRESENCE]
dsn=mydb
writesql=UPDATE `locationtable` SET `location`=${SQL_ESC(${VAL1})}` WHERE `username`='${SQL_ESC(${ARG1})}'
扩展.conf:
exten => 1234,1,NoOp(Set and read location)
exten => 1234,n,Set(ODBC_PRESENCE(${EXTEN})=office)