2016-04-09 31 views
0

我有一些Node-Red流作爲正在處理的Web應用程序的REST接口。但是,我在MySQL上遇到了插入事務。使用節點紅插入事務期間的ER_PARSE_ERROR

查詢被送入MySQL的節點是:

START TRANSACTION; 
INSERT INTO `light_schedule` (`name`, `light_pwm`, 
    `accent_pwm_red`, `accent_pwm_green`, `accent_pwm_blue`, `strobe`, 
    `start_date`, `start_time`, `end_date`, `end_time`, `repeat_type`, 
    `repeat_every`, `repeat_sunday`, `repeat_monday`, `repeat_tuesday`, 
    `repeat_wednesday`, `repeat_thursday`, `repeat_friday`, `repeat_saturday`, 
    `repeat_by`, `end_after_num`, `end_on`, `is_template`) 
VALUES ('example', NULL, NULL, NULL, NULL, 1, '2016-4-1', NULL, NULL, NULL, 2, 1, 1, 1, 1, 
    1, 1, 1, 1, NULL, NULL, NULL, 0); 

SET @schedule = LAST_INSERT_ID(); 

INSERT INTO `strobe_colors` (`schedule_id`, `order_index`, 
    `duration`, `accent_pwm_red`, `accent_pwm_green`, `accent_pwm_blue`, 
    `rainbow`) 
VALUES (@schedule, 0, 4600, NULL, NULL, NULL, 1), 
     (@schedule, 1, 4100, 150, 200, 163, 0); 

INSERT INTO `lights_schedules` (`light_id`, `schedule_id`) 
VALUES (5, @schedule), 
     (6, @schedule); 

COMMIT; 

此查詢工作完美,如果我複製並粘貼到phpMyAdmin的的查詢窗口。然而,當我試圖通過我的流程的觸發它,我得到一個錯誤:

Error: ER_PARSE_ERROR: 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 'INSERT INTO 
`light_schedule` (`name`, `light_pwm`, `accent_pwm_red`, `accent_pw' at line 2 

我一直無法就這個錯誤非常多的進步。我找到的最有幫助的事情是建議,以確保我對所有列和表名稱有反駁意見,這些我都無濟於事。

+0

嘗試用單引號代替反引號 – hardillb

+0

@hardillb,剛試過,不幸的是沒有喜悅。 –

回答

0

看來,這是node-red的mysql節點的限制。我試圖將我的查詢分解成我可以從最簡單的部分開始,然後從那裏建立起來,以查看事情發生的地方。經過一些測試以及大量垃圾被插入我的數據庫之後,看起來節點類型不是用來處理多個查詢的,而且包括不能處理事務。

我的下一個解決方案是嘗試創建一個存儲過程來運行事務,但使用微不足道的SELECT過程進行測試似乎表明此節點也存在過程問題。無論我在數據庫上設置了什麼權限或用戶創建了哪個過程,mysql節點都會聲明它沒有執行權限。

我已經解決的解決方案是創建一個mysql調用鏈,將相關數據通過flow.set傳遞給函數節點。這確實意味着我不能利用交易,但是對於這個項目,他們「不錯」具有超過關鍵數據庫功能的優點。