控制台中未定义的结果
Undefined result in console
当 运行 node.js:
时,我使用此合成器得到 "deposited over undefined" current_game 结果
if(offer.items_to_receive == undefined) return;
mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'',
function(err, row, fields) {
if(offer.items_to_receive.length > row[0].value) {
offers.declineOffer({tradeOfferId: offer.tradeofferid});
offer.items_to_receive = [];
var unixtime = Math.round(new Date().getTime()/1000.0);
mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`, `win`, `system`, `time`) VALUES (\''+offer.steamid_other+'\',\'Sorry, but you deposited too many items\',\'System\', \'0\', \'1\', \''+unixtime+'\')', function(err, row, fields) {});
return;
} else {
mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'',
function(err, row, fields) {
var current_game = (row[0].value);
mysqlConnection.query('SELECT COUNT(item) FROM `game' + current_game + '` AS maxitemperperson WHERE `userid`=\''+offer.steamid_other+'\'' , function(err, row) {
someVari = row[0].maxitemperperson;
console.log('Deposited over ' +someVari);
if((someVari + offer.items_to_receive.length) > 10) {
offers.declineOffer({tradeOfferId: offer.tradeofferid});
mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`, `win`, `system`, `time`) VALUES (\''+offer.steamid_other+'\',\'Sorry, but you deposited too many items\',\'System\', \'0\', \'1\', \''+unixtime+'\')', function(err, rowl, fields) {});
return;
}
})
})
}
});
语法错误在哪里?基本上,"else" 之前的第一部分正在工作,但之后我试图计算某个 table(通过 current_game 变量动态生成)中具有相同的 userid 然后添加另一个项目数并与 10 进行比较(也可以写为 row[0].value.
如有任何帮助,我们将不胜感激。
someVari = row[0].maxitemperperson;
正在将 undefined
分配给 someVari
。
这意味着 row[0]
存在但没有名为 maxitemperperson
的 属性(或者更不可能的是 属性 存在但其自身设置为 undefined
).
作为一种最低限度的调试技术,您可以使用 console.dir(row[0]);
来了解发生了什么。
您还应该通过检查回调中 err
的值来检查查询是否没有导致错误。
您在 SQL 语句中的错误位置使用了 AS
别名:
'SELECT COUNT(item) FROM `game' + current_game + '` AS maxitemperperson WHERE `userid`=\''+offer.steamid_other+'\''
这将为 table 名称添加别名,因此您可以 COUNT(maxitemperperson.item)
引用它(如果您在查询中有多个 table,则很有用)。
你要的是这个:
'SELECT COUNT(item) AS maxitemperperson FROM `game' + current_game + '` WHERE `userid`=\''+offer.steamid_other+'\''
当 运行 node.js:
时,我使用此合成器得到 "deposited over undefined" current_game 结果if(offer.items_to_receive == undefined) return;
mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'',
function(err, row, fields) {
if(offer.items_to_receive.length > row[0].value) {
offers.declineOffer({tradeOfferId: offer.tradeofferid});
offer.items_to_receive = [];
var unixtime = Math.round(new Date().getTime()/1000.0);
mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`, `win`, `system`, `time`) VALUES (\''+offer.steamid_other+'\',\'Sorry, but you deposited too many items\',\'System\', \'0\', \'1\', \''+unixtime+'\')', function(err, row, fields) {});
return;
} else {
mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'',
function(err, row, fields) {
var current_game = (row[0].value);
mysqlConnection.query('SELECT COUNT(item) FROM `game' + current_game + '` AS maxitemperperson WHERE `userid`=\''+offer.steamid_other+'\'' , function(err, row) {
someVari = row[0].maxitemperperson;
console.log('Deposited over ' +someVari);
if((someVari + offer.items_to_receive.length) > 10) {
offers.declineOffer({tradeOfferId: offer.tradeofferid});
mysqlConnection.query('INSERT INTO `messages` (`userid`,`msg`,`from`, `win`, `system`, `time`) VALUES (\''+offer.steamid_other+'\',\'Sorry, but you deposited too many items\',\'System\', \'0\', \'1\', \''+unixtime+'\')', function(err, rowl, fields) {});
return;
}
})
})
}
});
语法错误在哪里?基本上,"else" 之前的第一部分正在工作,但之后我试图计算某个 table(通过 current_game 变量动态生成)中具有相同的 userid 然后添加另一个项目数并与 10 进行比较(也可以写为 row[0].value.
如有任何帮助,我们将不胜感激。
someVari = row[0].maxitemperperson;
正在将 undefined
分配给 someVari
。
这意味着 row[0]
存在但没有名为 maxitemperperson
的 属性(或者更不可能的是 属性 存在但其自身设置为 undefined
).
作为一种最低限度的调试技术,您可以使用 console.dir(row[0]);
来了解发生了什么。
您还应该通过检查回调中 err
的值来检查查询是否没有导致错误。
您在 SQL 语句中的错误位置使用了 AS
别名:
'SELECT COUNT(item) FROM `game' + current_game + '` AS maxitemperperson WHERE `userid`=\''+offer.steamid_other+'\''
这将为 table 名称添加别名,因此您可以 COUNT(maxitemperperson.item)
引用它(如果您在查询中有多个 table,则很有用)。
你要的是这个:
'SELECT COUNT(item) AS maxitemperperson FROM `game' + current_game + '` WHERE `userid`=\''+offer.steamid_other+'\''