有没有一种方法可以使用node.js知道mysql表中是否存在行?

时间:2019-06-13 14:56:34

标签: javascript mysql node.js

我正在尝试创建一个返回true的函数,如果它检测到在nodejs的特定列中包含值的行。

我尝试使用来自query()的结果变量,但没有成功:

let rowexists = (mystring) => {
    let exists = false;
    let sql = "SELECT EXISTS( SELECT 1 FROM mytable WHERE `mycolumn` = '" + mystring + "')";

    connection.query(sql, function(error, result, field){
        console.log((result[sql]));
        console.log(exists);
        exists = (result[sql]);
    });
    return exists;
}

console.log(rowexists("myvalue"));

如果存在具有“ myvalue”值(存在)的行,则rowexists()始终返回false。

重要编辑:

我的问题实际上不是异步的,而是两者都是

console.log((result[sql]));

console.log(exists);

返回未定义。

1 个答案:

答案 0 :(得分:1)

在这种情况下,诺言很有用。

您遇到的问题是,在函数返回时查询尚未完成运行。因此,返回承诺后,我们可以在以后返回值。

  

侧面说明:使用SQL数据库时,您应该使用prepared queries

let rowexists = (mystring) => {
  // Return a new promise
  return new Promise(resolve => {
    // Create the sql query (this uses placeholders)
    // Hard coded values don't need to be placeholders but just for example:
    let sql = "SELECT 1 FROM ?? WHERE ?? = ?";
    // Query the database replacing the ?? and ? with actual data
    connection.query(sql, ['mytable', 'mycolumn', mystring], function(error, result, field){
      // Result will either be undefined or a row.
      // Convert it to a boolean and return it.
      resolve(!!result)
    });
  });
}

// Get the data
rowexists("myvalue").then(result => console.log(result))

使用异步/等待的自动调用功能:

(async function() {
  let exists = await rowexists('myothervalue')
  console.log(exists)
  // The rest of your related code
})()

如果您不喜欢then()语法,则可以使用async/await。您可以通过以下两种方式进行操作:

使用异步/等待的基本功能:

async function test() {
  let exists = await rowexists('mythrirdvalue')
  console.log(exists)
  // The rest of your related code
}

test()