在控制台中未定义的结果
在运行node.js时,我得到了用这个合成器在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”的第一部分正在工作,但之后,我正在尝试从具有相同用户标识的某个表(通过current_gamevariablesdynamic生成)中计算项目的数量,然后添加另外数量的项目与10(也可以写成row [0] .value)比较。
任何帮助,将不胜感激。
您在SQL语句中的错误位置有AS
别名:
'SELECT COUNT(item) FROM `game' + current_game + '` AS maxitemperperson WHERE `userid`=\''+offer.steamid_other+'\''
这将别名表名,所以你可以做COUNT(maxitemperperson.item)
来引用它(如果查询中有多个表,那么很有用)。
你想要的是这样的:
'SELECT COUNT(item) AS maxitemperperson FROM `game' + current_game + '` WHERE `userid`=\''+offer.steamid_other+'\''
someVari = row[0].maxitemperperson;
将someVari
赋值给undefined
。
这意味着row[0]
存在,但没有名为maxitemperperson
的属性(或者,不太可能,该属性存在,但本身设置为undefined
)。
作为最小的debugging技术,您可以使用console.dir(row[0]);
找出发生了什么事。
您还应该通过检查callback中的err
值来检查查询是否导致错误。