私はNode.jsとmysql NPM packageを使ってMySQL 5.7.14インスタンスと対話しています。私は私が作ってるんだクエリで構文エラーに関するエラーを取得しています:私はこれは私が作っ間違いでなければならないと思ったNPM 'mysql'モジュールを使用したMySQL構文エラー
まず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 votes (user_uid, node_uid, sentiment) VALUES ('fakeid-123'' at line 1
私がやっている私の入力値を、MySQLのエスケープNode.jsの中で次のよう
query =
'START TRANSACTION; ' +
'INSERT INTO votes (user_uid, node_uid, sentiment) VALUES (' +
connection.escape(user_uid) + ', ' +
connection.escape(node_uid) + ', ' +
connection.escape(newValue) +
'); ' +
'UPDATE nodes SET votification=votification+' + newValue + ' ' +
'WHERE uid=' + connection.escape(node_uid) + ';' +
'COMMIT;'
connection.query(query, function(err, rows) { //.. blah blah
はしかし、私はそれがconnection.query
に渡される直前query
変数の値をチェックするためにコンソールログを追加した、と私は、クエリの完全に合法的に見えるセットを取得しています:
START TRANSACTION; INSERT INTO votes (user_uid, node_uid, sentiment) VALUES ('fakeid-123', 'start', 1); UPDATE nodes SET votification=votification+1 WHERE uid='start';COMMIT;
ただし、上記のエラーが発生しています。私は、このクエリ文字列をそのままMySQLコンソールセッションにコピー&ペーストしようとしました。
これはNPM/mysqlモジュールでエラーですか?何らかの形でこの方法でトランザクションをサポートしていませんか?他に何が間違っているのでしょうか? MySQLに直接コピー&ペーストすると動作するので、クエリとトランザクションの作成は大丈夫だと思います。
私はこのモジュールを広範囲に使用していますが、これは偶然にもこのような失敗が発生する唯一のクエリであり、私はトランザクションを使用している唯一の場所です。私はこれらの2つのコールを「個別に」したくないので、ここでトランザクションを使用しています。 connection
オブジェクトは固いものだと私は知っています。なぜなら、このスコープ内の他の場所で問題なく使用しているからです。
メモ/編集:documentation for the mysql NPM module on transactionsが表示されます(これは現在では代わりに実装しています)。これは、私が望むものを実装するための非常に頑丈な方法です。なぜ、私が渡しているものを渡すのがわかりますか失敗する。私がチェックし、この中に思い付いた遊ん
これを3つのクエリに分割しようとしましたか? –
私はトランザクションによって提供されるアトミック性を維持したいと考えていました。私は特に、競合状態や他のユーザーからの干渉が潜在的にDB内の同じ行にアクセスするのを防ぐために、3つの個別のクエリを作成することを避けようとしています。 – Steverino
。私は周りに1分ほど麺を敷き詰め、答えを出しました。 –