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

MySql Trigger Issue variable not referencing in Command String

我有 table '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",而不是分配给变量的列的实际值。

有什么问题吗?

谢谢,

在您的 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。

您可能需要考虑一些检查,以了解您将允许哪些类型的值、转义潜在危险的字符等。