Я использую следующие модули узлов:
const mysql = require('mysql');
const SqlString = require('sqlstring');
Я читаю JSON из файлов и анализирую JSON во вложенный массив. Затем я передаю вложенный массив в массив MySQL INSERT.
. Это прекрасно работает для 25 из 26 файлов и загружает более 500 записей. Один файл содержит 21 JSON записей, и только следующая запись не выполняется:
[
{
"abstract": "... AWS Shared responsibility model: https://aws.amazon.com/compliance/shared-responsibility-model/; Enabling object-level logs in S3: ...",
"title": "Defeating a Cloud Breach Part 1"
}
]
Я выделил проблему в поле "abstract".
Я попытался экранировать значение " абстракция "перед загрузкой в массив с использованием обоих connection.escape () и SqlString.escape () из модулей" mysql "и" sqlString "соответственно. Ни один из случаев не исправляет то, что вызывает сбой INSERT.
Сбой INSERT, возвращая «undefined» независимо от методов. Успешный INSERT возвращает что-то вроде:
OkPacket {
fieldCount: 0,
affectedRows: 4,
insertId: 142,
serverStatus: 2,
warningCount: 0,
message: '&Records: 4 Duplicates: 0 Warnings: 0',
protocol41: true,
changedRows: 0
}
Столбец "abstract" в таблице MySQL имеет тип "text", и есть много других записей, длина которых превышает запись проблемы выше.
SqlString - Когда я перебираю ключ / значения JSON, я пытался экранировать строку перед помещением во вложенный массив.
Пример: abstract = SqlString.escape (значение))
Я также пробовал весь оператор INSERT, поэтому:
var sql = "INSERT INTO tbl (abstract,title,url,key_word) VALUES ?";
sql = SqlString.format(sql, [dbVals]);
var query = client.query(sql, function(err, result) {
console.log(result);
});
Очевидно, что в поле выше "client" есть экземпляр "mysql" CONNECTIONS (именно поэтому я также попытался подать в суд на mysql .escape () и client.escape () вместо SqlString.escape ())
Но я получаю точно такой же результат и только в этой одной записи .
Я подтвердил, что проблема заключается в том, что я удалил запись, указанную выше, и установил значение abstract в пустую строку, а в ОБА этих экземпляров - основная масса Вставить успешно.
Буду признателен за второй набор глаз. Более того, я был бы признателен за рекомендации о том, что я делаю неправильно, чтобы избежать экранирования, чтобы это не вызывало беспокойства в будущем.
Спасибо.
РЕДАКТИРОВАТЬ: Дополнительная информация добавлена в вопрос.