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。
您可能需要考虑一些检查,以了解您将允许哪些类型的值、转义潜在危险的字符等。
我有 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。
您可能需要考虑一些检查,以了解您将允许哪些类型的值、转义潜在危险的字符等。