我正在努力从软电话中获取数字然后插入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
那么朋友们有什么不对。我找不到解决这个问题的方法 非常感谢。
答案 0 :(得分:1)
已经晚了一年,但我会回答这个问题,以帮助像我一样来自搜索领域的人。
在您的func_odbc.conf中,您尝试编写VAL1
和VAL2
,但实际上您想要使用ARG1
和ARG2
;在随后的拨号方案中,VAL1
和VAL2
未设置(它们位于=之后)
[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)