Node JS MySQL Вставить запрос нескольких переменных ER_PARSE_ERROR

Я создал веб-перехватчик для получения данных с помощью 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.info("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)

Не могли бы вы показать точный результат вашего кода форматирования? Что получается в результате sql?

Eriks Klotins 12.12.2018 22:52

Результирующего SQL нет, потому что скрипт node js никогда не выполняется, но я могу неправильно понять ваш вопрос. Вы просто хотите увидеть остальную часть сценария?

Gonez 12.12.2018 23:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
593
3

Ответы 3

Думаю, проблема в этом коде:

VALUES ("+timestamp.toString()+"

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

Не уверен, как ".toString ()" попал в этот пост, я уже удалил его и все еще получаю ту же ошибку. Мои извинения за это

Gonez 12.12.2018 23:02

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

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

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

var sql = "ВСТАВИТЬ В 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 +" ', " + продолжительность + "," + hotspotid + ", '" + hotspotid + "'," + playlistid + ", '" + playlistname + "', '" + playlisttype + "'," + playlistassetid + ", '" + playlisttitle + "')"

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

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}" ...)`;

Другие вопросы по теме