2016-04-09 34 views
0

私が取り組んでいるWebアプリケーションへのRESTインタフェースとして機能するNode-Redフローがいくつかあります。しかし、私はMySQLの挿入トランザクションで壁にぶつかってきました。Node-Redでトランザクションを挿入中の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ノードの制限であるようです。私は私のできる最も単純な部分に私の質問を壊して、そこから物事が壊れてどこを見るために構築しようとしました。いくつかのテストとゴミ箱がDBに挿入された後、ノードタイプは複数のクエリを処理するために構築されておらず、トランザクションを処理できないことが含まれているようです。

私の次の解決策は、トランザクションを実行するストアドプロシージャを作成しようとしていましたが、簡単な手順でテストすると、このノードにもプロシージャに関する問題があるようです。どのようなパーミッションをDBに設定したのか、どのユーザがプロシージャを作成したのかに関係なく、mysqlノードは実行権限を持っていないと主張します。

私が解決した解決策は、関連するデータをflow.set経由で関数ノードに転送する一連のmysql呼び出しを作成することでした。これは残念ながらトランザクションを利用することができないという意味ですが、このプロジェクトでは重要なデータベース機能以上のものを持っていることが「好き」です。

関連する問題