Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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/NPM的MySQL库中使用Promission和查询_Javascript_Mysql_Node.js_Asynchronous_Promise - Fatal编程技术网

Javascript 在Node.JS/NPM的MySQL库中使用Promission和查询

Javascript 在Node.JS/NPM的MySQL库中使用Promission和查询,javascript,mysql,node.js,asynchronous,promise,Javascript,Mysql,Node.js,Asynchronous,Promise,我将mysql NPM库与Node.JS一起使用,并尝试查询数据库,让函数返回承诺,而不需要回调。以下是我尝试过的: index.js: var result = await asyncQuery.main(connection, "SELECT * FROM tbl WHERE id = ?", "1234567890") asyncQuery.js: var colors = require('colors') module.exports = { main: function(co

我将mysql NPM库与Node.JS一起使用,并尝试查询数据库,让函数返回承诺,而不需要回调。以下是我尝试过的:

index.js:

var result = await asyncQuery.main(connection, "SELECT * FROM tbl WHERE id = ?", "1234567890")
asyncQuery.js:

var colors = require('colors')

module.exports = {
  main: function(con, q, vars) {
    return new Promise((resolve, reject) => {
      if (!vars) {
        con.query(q, function (err, result) {
          if (err) {
            console.log(colors.red(err.stack))

            return reject(err);
          }
          resolve(result)
        })
      }
      else {
        con.query(q, vars, function (err, result) {
          if (err) {
            console.log(colors.red(err.stack))

            return reject(err);
          }
          resolve(result)
        })
      }
    })
  }
}
如果没有通过VAR/ARG?,这可以正常工作,但是一年一次?如果使用,我会得到一个错误:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
如果我运行一个带有回调的常规查询,这将非常好。asyncQuery.js有问题,但我不确定问题出在哪里

是否有人对此代码进行了修复,或者有更简单的方法来实现我的目标?我听说过,但我不确定它是否支持承诺和回调查询。如果有,请告诉我,我会试一试

NodeJS版本:9.1.0

NPM版本:5.5.1

NPM的MySQL库版本:2.15.0

您可以使用npmjs提供的MySQL promise包,它充当MySQL和mysql2的包装器:

用法示例:

var db = require('mysql-promise')();

db.configure({
    "host": "localhost",
    "user": "foo",
    "password": "bar",
    "database": "db"
});

db.query('UPDATE foo SET key = ?', ['value'])
.then( function(){ return db.query('SELECT * FROM foo'); })
.spread(function (rows) { console.log('Loook at all the foo', rows); });
您可以使用npmjs提供的mysql promise包,它充当mysql和mysql2的包装器:

用法示例:

var db = require('mysql-promise')();

db.configure({
    "host": "localhost",
    "user": "foo",
    "password": "bar",
    "database": "db"
});

db.query('UPDATE foo SET key = ?', ['value'])
.then( function(){ return db.query('SELECT * FROM foo'); })
.spread(function (rows) { console.log('Loook at all the foo', rows); });

精确的查询工作正常,不会触发该错误,您可能有一个更复杂的查询,其中包含多个占位符,例如:

从tbl中选择*其中id=?或者ref_id=

在这种情况下,您不需要发送字符串,而是需要发送一个包含尽可能多的值的数组?你有

因此,只需发送:[1234567890,1234567890],而不是上面查询的字符串

此外,您的方法可以简化为:

module.exports = {
    main(con, q, vars) {
        return new Promise((resolve, reject) => {
            con.query(q, vars, function(err, result) {
                if (err) {
                    console.log(colors.red(err.stack))

                    return reject(err);
                }
                resolve(result)
            })
        })
    }
}
允许您删除if/else


作为个人说明,我更喜欢mysql2包,它已经有了一个,而且比mysql更快,因为它有几乎相同的API。

确切的查询可以工作并且不会触发错误,您可能有一个更复杂的查询,带有多个占位符,例如:

从tbl中选择*其中id=?或者ref_id=

在这种情况下,您不需要发送字符串,而是需要发送一个包含尽可能多的值的数组?你有

因此,只需发送:[1234567890,1234567890],而不是上面查询的字符串

此外,您的方法可以简化为:

module.exports = {
    main(con, q, vars) {
        return new Promise((resolve, reject) => {
            con.query(q, vars, function(err, result) {
                if (err) {
                    console.log(colors.red(err.stack))

                    return reject(err);
                }
                resolve(result)
            })
        })
    }
}
允许您删除if/else


作为个人说明,我更喜欢mysql2软件包,它已经有了一个新的API,而且比mysql更快,因为它有着几乎相同的API。

Woah这确实有效!我不明白的是,正如我刚刚发现的那样,我的示例查询在没有[]的情况下确实有效,但更复杂的查询需要[],即使它只有一个?。尽管如此,还是要感谢您的回答:functioncon,q,…vars{-或者因为ES2015是一个东西maincon,q,…vars{@apxx老实说总是发送一个对象/数组,它现在对我发送一个字符串有效,但不是在所有情况下都有效,所以如果你提供你的查询,我可以编辑一下我的答案。哇,这确实有效!我不明白的是,我的示例查询确实有效,正如我刚刚发现的,没有[],但更复杂的查询需要[],尽管它只有一个?。尽管如此,还是要感谢您提供的响应可选main:functioncon,q,…vars{-或者因为ES2015是一个东西maincon,q,…vars{@apxx一直发送一个对象/数组,它现在可以为我发送一个字符串,但不是在所有情况下,所以如果您提供查询,我可以稍微编辑我的答案。