Было 2 дня, пытаясь найти решение моей проблемы. Я запрашиваю данные (json) с веб-сайта. Они возвращают штраф, а json действителен, но когда я пытаюсь вставить их в базу данных, почти 10% не вставлены. Я не знаю, что делать, я даже попробовал php с одинаковыми результатами. Любой мир помощи должен быть благодарен вам.
Это json ouptut после выбора атрибута data var result = obj.data; Pastebin
var request = require("request");
var fs = require('fs');
var sleep = require('system-sleep');
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'feeds',
timezone: 'Z'
});
request.post({
url: "xxx",
headers: {
"Content-Type": "application/json"
},
body: '{"xx": "true", "xxx": "true"}'
}, function(error, response, body) {
var obj = JSON.parse(body);
var result = obj.data;
console.log(result);
for (var i = 0; i < result.length; i++) {
var object = result[i];
for (property in object) {
var value = object[property];
var pid, pname;
if (property == "id") {
pid = value;
}
if (property == "name") {
pname = value;
}
if (property == "xxxxx") {}
if (property == "xxxxxxxx") {
connection.query('INSERT INTO tournaments(id, name) VALUES (' + pid + ', "' + pname + '")');
}
}
}
});
Добро пожаловать в SO.
Вероятно, вам не хватает ошибки. Вы запрашиваете вставку, но затем отпустите ее. connection.query
позволяет использовать функцию в качестве второго параметра, и это обратный вызов. Проверьте следующую строку
connection.query( 'SELECT * FROM some_table', ( err, rows ) => {
// do something with the results here
} );
Для вас это будет выглядеть примерно так:
connection.query('INSERT INTO tournaments(id, name) VALUES (' + pid + ', "' + pname + '")', function(err, rows){
console.log('Successful write', rows);
console.error('Error! This did not write because: ', err);
})
Вы должны console.log как err, так и строки, для каждого вызова. Скорее всего, вы увидите, почему некоторые из результатов не записываются в БД, и они будут отображаться как ошибки.