2015-10-26 80 views
0

我創建了下面的觸發器與phpMyAdmin的XAMPP的WindowsMySQL的:不能恢復從觸發#1415

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 

一個結果集和我第一次嘗試插入的ci_sessions錯誤表從我的Chrome瀏覽器調用帶有URL控制器

錯誤號:1415:不允許返回從觸發的結果集

+0

ci_sessions上還有其他觸發器嗎? – zedfoxus

+0

我確實嘗試用@ud變量替換NEW.user_data,只保留最後一個。也沒有工作。 –

+0

zedfoxus我確實在做。那是問題嗎?! –

回答

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