0

我正在尝试使用 node.js 在我的 SQL 数据库上使用 SELECT 查询,下面的 SELECT 查询应该可以工作,但不能。这很奇怪,因为我认为这应该可以工作,但它甚至没有进入 client.query 函数。我还复制了我的 INSERT 查询,该查询实际上正在向您展示我与数据库的连接工作正常。

我在 SELECT 查询中做错了什么?

创建连接

var mysql = require('mysql');
var client = mysql.createConnection({
    host: '***',
    user: '***',
    password: '***',
    database: '***'
});

SELECT 查询(不工作)

    function query(sql){
      var returnvalue = "tempVal";
      client.connect();
      client.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
        returnvalue = "doens't even enter function";
        if (err) throw err;

        returnvalue = rows[0].solution;
      });
      client.end();    
      return returnvalue;
    }

插入查询(正在工作)

function query(sql){
  client.connect();
  client.query('INSERT INTO users (username) VALUES("foo")');
  client.end();
}
4

1 回答 1

1

作为.query()异步方法,您将无法获取该值,因为在评估后将return调用回调。return

你必须继续这个callback模式:

function query(sql, callback) {
    client.connect();
    client.query(sql, function (err, rows, fields) {
        if (err) {
            callback(err);
        else
            callback(null, rows, fields);
    });

    client.end();
}

更正:似乎client.end()允许当前查询在连接实际关闭之前完成。

关闭连接使用end()确保在向 mysql 服务器发送退出数据包之前执行所有剩余查询。

但是,.end()在回调内部调用对于许多 API 来说是司空见惯的,因为它们会切断任何待处理的操作。

于 2013-07-02T20:05:21.017 回答