【问题标题】:MySQL: Not allowed to return a result set from a trigger #1415MySQL:不允许从触发器返回结果集 #1415
【发布时间】:2016-01-25 15:39:58
【问题描述】:

我在 xampp for windows 上使用 phpmyadmin 创建了以下触发器

CREATE TRIGGER strip_ud_in BEFORE INSERT ON ci_sessions
FOR EACH ROW
BEGIN
SET NEW.user_data = REPLACE(NEW.user_data,'"','&#34');
SET NEW.user_data = REPLACE(NEW.user_data,':','&#58');
SET NEW.user_data = REPLACE(NEW.user_data,';','&#59');
SET NEW.user_data = REPLACE(NEW.user_data,'{','&#123');
SET NEW.user_data = REPLACE(NEW.user_data,'}','&#125');
END

我在第一次尝试通过从我的 chrome 浏览器调用带有 url 的控制器插入 ci_sessions 表时遇到错误

错误号:1415:不允许从触发器返回结果集

【问题讨论】:

  • 您在 ci_sessions 上还有其他触发器吗?
  • 我确实尝试用 @ud 变量替换 NEW.user_data 并且只保留了最后一个。也没有用。
  • zedfoxus 我确实这样做了。有问题吗?!
  • 问题可能出在其他触发器上。据我所知,这个触发器没有问题。
  • 这很棘手。因为它是“插入前”这个事件的唯一触发器。

标签: mysql triggers phpmyadmin


【解决方案1】:

我认为此触发器与错误无关。让我们举个例子来帮助转移对这个触发器的注意力。

-- create a dummy table
create table ci_sessions_test (user_data varchar(100));

-- create the same kind of trigger on this dummy table
delimiter //

CREATE TRIGGER strip_ud_in_ci_sessions_test BEFORE INSERT ON ci_sessions_test
FOR EACH ROW
BEGIN
SET NEW.user_data = REPLACE(NEW.user_data,'"','&#34');
SET NEW.user_data = REPLACE(NEW.user_data,':','&#58');
SET NEW.user_data = REPLACE(NEW.user_data,';','&#59');
SET NEW.user_data = REPLACE(NEW.user_data,'{','&#123');
SET NEW.user_data = REPLACE(NEW.user_data,'}','&#125');
END //

delimiter ;

现在添加一些数据。请注意,结果看起来很好。

insert into ci_sessions_test values ('test'), ('testing;');

select * from ci_sessions_test;

Results:
user_data
----------
test
testing&#59

这表明触发器正常运行而不会导致错误。它还表明如果此表上还有其他触发器,它们可能是导致错误的原因。在这些触发器中,请确保如果您没有使用 SELECT fields FROM ...。如果您使用类似的东西,您可能需要将它们更改为SELECT fields INTO localvariablename FROM ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2012-08-06
    • 2019-09-03
    相关资源
    最近更新 更多