2014-05-20 51 views
3

觸發創作只是不工作創建觸發器,我用盡了一切我能想到的,例如,像:如何笨的遷移庫

$this->db->query("DELIMITER //\r\n 
CREATE TRIGGER `delete_post` BEFORE DELETE ON `posts`\r\n 
FOR EACH ROW BEGIN\r\n 
DELETE FROM page_content WHERE page_content.post_id = OLD.post_id;\r\n 
END\r\n 
//\r\n 
DELIMITER ;"); 

而且無論我做什麼,我都將它獲得的感覺不會創建觸發器,因爲Codeigniter只在一行中創建SQL語句。與不換行試過,仍然得到這個消息:

錯誤編號:1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL  server version for the right syntax to use near 'DELIMITER // CREATE TRIGGER `delete_post` BEFORE DELETE ON `posts` FOR EAC' at line 1 

DELIMITER // CREATE TRIGGER `delete_post` BEFORE DELETE ON `posts` FOR EACH ROW BEGIN DELETE FROM page_content WHERE page_content.post_id = OLD.post_id; END // DELIMITER ; 

在phpMyAdmin,觸發創建的方式工作,所以SQL是有效

+0

取出分隔符部分,mysql_或mysqli_函數應該能夠執行沒有分隔符的觸發器。 –

+0

我會試試看,因爲它絕對是一個分隔符問題,它需要在我自己的測試行上 – NaturalBornCamper

+0

是的,試試看你也可以檢查這個線程http://stackoverflow.com/questions/3762880/ create-mysql-trigger-via-php –

回答

5

你應該在通過PHP執行時從觸發器中刪除分隔符。 mysql_或mysqli_函數應該能夠執行沒有 分隔符的觸發器。

以下是如何做到這一點。

$this->db->query(" 
CREATE TRIGGER `delete_post` BEFORE DELETE ON `posts`\r\n 
FOR EACH ROW BEGIN\r\n 
DELETE FROM page_content WHERE page_content.post_id = OLD.post_id;\r\n 
END\r\n 
//\r\n 
"); 
+0

謝謝Abhik!對於其他看到這一點的人來說,它也可以在沒有\ r \ n的情況下工作,而且\ r \ n – NaturalBornCamper

+0

是的。 –

+0

@AhhikChakraborty,是的,它沒有它的作品 – Chococroc