MySql Trigger问题变量未在命令字符串中引用

时间:2015-05-16 00:17:08

标签: mysql triggers

我有桌子' ABANDON'以下字段,

ID  bigint(40)  
CALLID  varchar(100)        
STATUS  varchar(10) 

每当为已放弃的调用插入CALLID时,我都会将其传递给shell脚本进行处理,

这是我的触发器,

DELIMITER @@
CREATE TRIGGER abandon_insert AFTER INSERT ON ABANDON
    FOR EACH ROW
    BEGIN
         DECLARE cmd CHAR(255);
         DECLARE result int(10);
         DECLARE ckey varchar(100);
         SET ckey := NEW.CALLID;      
         SET cmd="/usr/bin/tellabandon ckey";
         SET result = sys_exec(cmd);      
    END;
    @@
DELIMITER ;

我无法将列值分配给变量。

在我的SET命令字符串中,我将引用的值作为" ckey"而不是分配给变量的列的实际值。

可能出现什么问题?

谢谢,

1 个答案:

答案 0 :(得分:0)

在你的set语句中,“ckey”是文字字符串的一部分。

= "/usr/bin/tellabandon ckey";
                        ^^^^

要获取ckey变量的,可以连接文字字符串和变量值

 = CONCAT("/usr/bin/tellabandon ",ckey);

重要注意事项:考虑一下ckey包含某些恶意内容时可能会获得的行为,通过某些内容向CALLID列分配一些内容,例如。

 'foo && rm -f /tmp/*'

 '`rm -f /tmp/*`'

(我不确定什么可以传递到sys_exec,它做了什么样的检查,但对我来说似乎很危险。)

另外,请注意,使用NULL值进行字符串连接会导致NULL。

您可能需要考虑一些检查,了解您将允许哪些值,逃避潜在危险的角色等。