我有一个表T1并在T1上插入后触发了一个触发器并使用UDF调用外部PHP程序,其中应用程序正在寻找最后插入的数据并在条件库上执行操作但是它没有按预期工作..请帮助,因为我猜我们无法从同一个表中选择我们触发触发器的数据?是这样吗?
TRIGGER
DELIMITER @@
CREATE TRIGGER CALL
AFTER INSERT ON call_test
FOR EACH ROW
BEGIN
DECLARE cmd CHAR(255);
DECLARE result int(10);
SET cmd=CONCAT('php /var/www/html/test/call.php');
SET result = sys_exec(cmd);
END;
@@
DELIMITER ;
call.php
function connect_db() {
$db_connection = mysql_connect("localhost","root","test") or die (mysql_error());
$db_select = mysql_select_db('testdb') or die (mysql_error());
}
connect_db();
$sql2=mysql_query("SELECT * FROM call_test ORDER BY createtime desc limit 1") or die(mysql_error());
$res = mysql_fetch_array($sql2);
if(strstr($res['name'],'go')!=false)
{
echo "inserted";
//sleep(10);
$sql4=mysql_query("insert into call_test_auto (name,createtime) values ('from UDF automatic2','".$today."')") or die(mysql_error());
}
else
{
echo "not inserted";
}
答案 0 :(得分:1)
NEW
排成行。见Trigger Syntax and Examples
您的任务是尽一切可能将事情变为变量,以便您可以concat
并使用它们作为命令行参数调用UDF。正如here所见,那位绅士将Sarbajit
的命令行参数发送给他编译的C程序。
在你的情况下,你只是在调用PHP而且没有任何事情发生!
启用sys_exec
在没有收到语法错误的情况下,您的普通Joe可能无法在sys_exec()
的调用中幸存。请参阅堆栈上的This Question和该问题顶部的github链接。
事情无声地失败
请记住,mysql触发器和事件(如Create Event中所述)运行并成功实现您的愿望或不要,但请默默地执行此操作。您可能甚至不知道发生了上述语法错误。对于具有错误报告的查询中的用户运行的存储过程,情况并非如此。
当然,触发器或事件可以调用存储过程,但是没有用户体验,因此sys_exec()
语法错误将被忽视。