‘ER_PARSE_ERROR’ на узле mysql при вставке нескольких значений

#mysql #sql #node.js #node-mysql

#mysql #sql #node.js #узел-mysql

Вопрос:

Я пытаюсь ввести несколько значений в базу данных, используя node-mysql в node. мой исходный код

 engine.files.forEach(function(file) {
  torrentpath = file.path.replace(/amp;/g, "amp;amp;").replace(/>/g, "amp;>").replace(/</g, "amp;<").replace(/"/g, "amp;quot;").replace(/'/g, "amp;apos;").replace(/\/g, "/");
  torrentFiles.push([
    result.insertId,
    torrentpath,
    file.length
  ]);
});

console.log(torrentFiles);

app.mysql.query('INSERT INTO `files` (`torrentid`, `filename`, `filesize`) VALUES ?', torrentFiles, function(err, result) {
  if (err) throw err;
});
  

Ошибка, которую я получаю,

 [ [ 11, 'ubuntu-14.04-desktop-amd64.iso', 1010827264 ] ]

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 '11, 'ubuntu-14.04-desktop-amd64.iso', 1010827264' at line 1
    at Query.Sequence._packetToError (C:wampwwwsleepytorrentdownloadsrcnode_modulesmysqllibprotocolsequencesSequence.js:30:14)
  

В настоящее время все мои другие sql-запросы, похоже, работают, поэтому я в настоящее время подключен к базе данных.
Если потребуется дополнительная информация, я с радостью ее предоставлю. Я просто не знаю, что еще добавить сюда.

Комментарии:

1. 3 поля, всего 2 значения….

2. @RobertRozas На самом деле нет, он просто показывает, где находится синтаксическая ошибка. Попробуйте вызвать app.mysql.escape() каждое из ваших значений, поскольку оно неправильно экранировано, как вы можете видеть на '16, .

3. @BenFortune, который '16, заканчивается, если ошибка была достаточно короткой, но я все равно добавил escape, но отображается та же ошибка. Я думаю, что одинарная кавычка присутствует при печати ошибки

Ответ №1:

В итоге я просто использовал mysql.escape (val) внутри запроса

  app.mysql.query('INSERT INTO `files` (`torrentid`, `filename`, `filesize`) VALUES ' app.mysql.escape(torrentFiles), function(err, result) 
  

Редактировать

Исправление для этого заключалось в добавлении ввода torrentFiles [] . теперь

 app.mysql.query('INSERT INTO `files` (`torrentid`, `filename`, `filesize`) VALUES ? ', [torrentFiles], function(err, result)