MySQL:不允许从触发器#1415返回结果集

时间:2015-10-26 13:51:37

标签: mysql triggers phpmyadmin

我在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:不允许从触发器返回结果集

1 个答案:

答案 0 :(得分:0)

我不认为此触发器与错误有任何关系。让我们举一个例子来帮助关注这个触发器。

-- 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 ...