Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js和mysql如果数据库中有1,如何获得2?_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript node.js和mysql如果数据库中有1,如何获得2?

Javascript node.js和mysql如果数据库中有1,如何获得2?,javascript,mysql,node.js,Javascript,Mysql,Node.js,我想把+1添加到数据库中,如果在这个例子中我有1,那么数据库中就有2,我尝试了,但是得到了11,而不是2 if (result4.length) { var sql1 = `UPDATE level SET xp = '${result4[0].xp + 1}' WHERE xp = '${result4[0].xp}'`; connection.query(sql1, function(err, result) { if (err) throw err; }); } 以

我想把+1添加到数据库中,如果在这个例子中我有1,那么数据库中就有2,我尝试了,但是得到了11,而不是2

if (result4.length) {
  var sql1 = `UPDATE level SET xp = '${result4[0].xp + 1}' WHERE xp = '${result4[0].xp}'`;

  connection.query(sql1, function(err, result) {
    if (err) throw err;
  });
}
以下是完整的来源,以防万一:

client.on("message", message => {
  if (message.author.bot) return;
  connection.query(`SELECT * FROM guildn WHERE id = '${message.guild.id}'`, function(err, result3) {
    if (err) {
      return console.log('Error1');
    }
    if (result3.length) {
      connection.query(`SELECT * FROM level WHERE id = '${message.author.id}'`, function(err, result4) {
        if (err) {
          return console.log('Error1');
        }
        if (!result4.length) {
          var sql = `INSERT INTO level (guild , id , nivel , xp) VALUES ('${message.guild.id}','${message.author.id}','0','1')`;
          connection.query(sql, function(err, result) {
            if (err) throw err;
            console.log("1 record inserted");
            return
          });
        }
        if (result4.length) {
          var sql1 = `UPDATE level SET xp = '${result4[0].xp + 1}' WHERE xp = '${result4[0].xp}'`;

          connection.query(sql1, function(err, result) {
            if (err) throw err;
          });
        }
      });
    }
  });
});

我用谷歌翻译来写这篇文章,所以如果我在翻译中有任何错误,我很抱歉,我怀疑来自数据库
xp
的结果是一个字符串。这似乎合乎逻辑,因为您在查询中将其设置为字符串。在这种情况下,您可以这样做:

`UPDATE level SET xp = '${parseInt(result4[0].xp) + 1}' WHERE xp = '${result4[0].xp}'`;

这会将结果转换为一个数字,javascript将向其中添加1,而不是将1连接到字符串。

我猜发生的情况是,您的XP数据以字符串形式存储在数据库中,因此您最终尝试将数字添加到字符串中。在Javascript中,这种情况下的结果是将数字连接到字符串的末尾,这就是为什么最后的结果是“11”而不是2

要在不更改数据库的情况下解决此问题,可以在向XP字符串添加1之前使用parseInt将其转换为整数:

        var sql1 = `UPDATE level SET xp = '${ parseInt (result4[0].xp) + 1}' WHERE xp = '${result4[0].xp}'`;

如果
xp
的数据类型是一个字符串,则对更新调用稍加修改即可:

if (result4.length) {
  const query = `UPDATE level SET xp = '${Number(result4[0].xp) + 1}' WHERE xp = '${result4[0].xp}'`;

  connection.query(query, function(err, result) {
    if (err) throw err;
  });
}

这可能是因为
xp
的类型是字符串而不是整数。因此,如果两个或更多的人拥有相同数量的xp,他们都会得到+1
WHERE xp='${result4[0].xp}'
我想你的意思是
WHERE id='${message.author.id}'