Я создал веб-перехватчик для получения данных с помощью 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 нет, потому что скрипт node js никогда не выполняется, но я могу неправильно понять ваш вопрос. Вы просто хотите увидеть остальную часть сценария?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Думаю, проблема в этом коде:
VALUES ("+timestamp.toString()+"
Не могли бы вы попытаться избежать этих двойных кавычек?
Не уверен, как ".toString ()" попал в этот пост, я уже удалил его и все еще получаю ту же ошибку. Мои извинения за это
Мое первое предложение - создать хранимую процедуру, которая принимает параметры, вместо того, чтобы открываться для 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}" ...)`;
Не могли бы вы показать точный результат вашего кода форматирования? Что получается в результате sql?