У меня есть такая функция, как getItemPrice в nodeJS. Но при попытке вставки данных возникает ошибка. Невозможно записать какое-либо динамическое значение внутри VALUES(item.Id, value.lowest_price).
Я пробовал много вещей, но ничего не работает.
con.query('SELECT game_item.id as itemId, steam_app_game.app_id as gameId, game_item.name, steam_app_game.id FROM steam_app_game LEFT JOIN game_item ON steam_app_game.id = game_item.app_game_id', function(err, rows, fields) {
var counter = 1;
rows.forEach(function (item,index) {
setTimeout(function(){
market.getItemPrice(item.gameId, item.name).then(function (value, err) {
if (err) throw err;
var lowest = value.lowest_price
con.query('INSERT INTO game_item_spec(game_item_id,price) VALUES (item.itemId,value.lowest_price )')
counter ++;
});
}, index * 5000);
});
});
Вот ошибка.
ER_BAD_FIELD_ERROR: Unknown column 'value.lowest_price' in 'field list'
at Query.Sequence._packetToError (F:\Xamp\htdocs\steam-trade-bot\node_modules\mysql\lib\protocol\sequences\Sequence.js:47
:14)






Я решил это, используя операторы параметров в nodeJs. Одиночная вставка в не работает, если данные содержат специальные символы
Я рекомендую вам использовать асинхронный узел https://caolan.github.io/async/, использовать ряд вместе с каждый из серий.
Запрос должен быть строкой, поэтому для ввода некоторых переменных внутри вы можете использовать синтаксис ES6 со строкой шаблона. Вот рабочий код:
con.query('SELECT game_item.id as itemId, steam_app_game.app_id as gameId, game_item.name, steam_app_game.id FROM steam_app_game LEFT JOIN game_item ON steam_app_game.id = game_item.app_game_id', function(err, rows, fields) {
var counter = 1;
rows.forEach(function (item,index) {
setTimeout(function(){
market.getItemPrice(item.gameId, item.name).then(function (value, err) {
if (err) throw err;
var lowest = value.lowest_price
con.query(`INSERT INTO game_item_spec(game_item_id,price) VALUES (${item.itemId}, ${value.lowest_price} )`)
counter ++;
});
}, index * 5000);
});
});