Узел JS MySQL Вставить запрос нескольких переменных ER_PARSE_ERROR - PullRequest
0 голосов
/ 13 декабря 2018

Я создал веб-крючок для получения некоторых данных с помощью Node.JS.Я храню свои данные, используя MySQL, и до сих пор сервер мог подключаться к базе данных, получать данные клиента и отвечать соответствующим образом при получении данных.У меня просто возникают проблемы с форматированием строки запроса для MySQL.

Я пробовал различные конфигурации цитат, такие как не упаковка имен столбцов в одинарные кавычки, не упаковка имени таблицы и переключение между двойными и одинарными кавычкамипо каждому разделу в строке запроса.

Будем благодарны за любые предложения!Спасибо!

Мой запрос:

var sql = "INSERT INTO 'cms'('ts', 'orgid', 'orgname', 'deviceid', 'devicename', 'event', 'setid', 'setname', 'viewid', 'viewname', 'duration', 'hotspotid', 'hotspotname', 'playlistid', 'playlistname', 'playlisttype', 'playlistassetid', 'playlisttitle') VALUES ("+timestamp+", "+orgid+", "+orgname+", "+deviceid+", "+devicename+", "+eventname+", "+setid+", "+setname+", "+viewid+", "+viewname+", "+duration+", "+hotspotid+", "+hotspotname+", "+playlistid+", "+playlistname+", "+playlisttype+", "+playlistassetid+", "+playlisttitle+")";
                            con.query(sql, function (err, result) { //Queries String with MySQL connection variable con
                                    if (err) throw err;
                                    var date = new Date();
                                    var currHour = date.getHours();
                                    console.log("Record Inserted at " + currHour); //Logs time of db insertion on console
                            });

Здесь тоже ошибка:

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 ''cms'('ts', 'orgid', 'orgname', 'deviceid', 'devicename', 'event', 'setid', 'set' at line 1
at Query.Sequence._packetToError (/home/webhook/httpHandler/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
at Query.ErrorPacket (/home/webhook/httpHandler/node_modules/mysql/lib/protocol/sequences/Query.js:77:18)
at Protocol._parsePacket (/home/webhook/httpHandler/node_modules/mysql/lib/protocol/Protocol.js:278:23)
at Parser.write (/home/webhook/httpHandler/node_modules/mysql/lib/protocol/Parser.js:76:12)
at Protocol.write (/home/webhook/httpHandler/node_modules/mysql/lib/protocol/Protocol.js:38:16)
at Socket.<anonymous> (/home/webhook/httpHandler/node_modules/mysql/lib/Connection.js:91:28)
at Socket.<anonymous> (/home/webhook/httpHandler/node_modules/mysql/lib/Connection.js:502:10)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
--------------------
at Protocol._enqueue (/home/webhook/httpHandler/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Connection.query (/home/webhook/httpHandler/node_modules/mysql/lib/Connection.js:200:25)
at IncomingMessage.<anonymous> (/home/webhook/httpHandler/server.js:70:9)
at emitNone (events.js:106:13)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Мое первое предложение - создать хранимую процедуру, которая принимает параметры, вместо того, чтобы открывать себя для SQL-инъекции.

Мое второе предложение - нормализовать ваши таблицы.Если вы добавляете и ID, и Имя для более чем ключевых данных таблицы, это плохой дизайн.

В остальном Рой права.Вам нужно заключить несколько значений в экранированные кавычки:

var sql = "INSERT INTO cms (` ts`, `orgid`,` orgname`, `deviceid`,` devicename`, `event`,`setid`,` setname`, `viewid`,` viewname`, `duration`,` hotspotid`, `hotspotname`,` playlistid`, `playlistname`,` playlisttype`, `playlistassetid`,` playlisttitle`) VALUES ('"+ timestamp.toString () +"', "+ orgid +", '"+ orgname +"', "+ deviceid +", '"+ devicename +"', '"+ eventname +"', "+ setid +", '"+ setname + "'," + viewid + ",'" + viewname + "'," + duration + "," + hotspotid + ",'" + hotspotname + "'," + playlistid + ",'" + playlistname + "','" + playlisttype +"'," + playlistassetid + ",'" + playlisttitle + "')"

0 голосов
/ 13 декабря 2018

Я бы сделал что-то подобное вместо этого.

var sql = `INSERT INTO 'cms'('ts', 'orgid', 'orgname', 'deviceid', 'devicename', 'event', 'setid', 'setname', 'viewid', 'viewname', 'duration', 'hotspotid', 'hotspotname', 'playlistid', 'playlistname', 'playlisttype', 'playlistassetid', 'playlisttitle') VALUES ("${timestamp}", "${orgid}" ...)`;
0 голосов
/ 13 декабря 2018

Я думаю, проблема заключается в следующем коде:

VALUES ("+timestamp.toString()+"

Не могли бы вы попытаться экранировать символы двойной двойки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...