试图制作返回 mysql 'SELECT * FROM' 结果的函数,最终返回 undefined

Posted

技术标签:

【中文标题】试图制作返回 mysql \'SELECT * FROM\' 结果的函数,最终返回 undefined【英文标题】:Trying to make function that returns mysql 'SELECT * FROM' results, ended up returning undefined试图制作返回 mysql 'SELECT * FROM' 结果的函数,最终返回 undefined 【发布时间】:2020-08-30 04:54:06 【问题描述】:

我正在尝试创建一个从 SQL 'SELECT * FROM' 返回统计数据数组的函数,当我不使用函数返回它时,它可以工作,但我不能在外部使用该数组'函数(错误,结果)'

con.query(`SELECT * FROM MemberPeniz WHERE memberId = '$memberID'`, function(err, results) 
            if(err) 
                throw err;
            
            console.log(results)
        )

我试过这个:

function checkTimeoutMEMBERid(memberID) 
        con.query(`SELECT * FROM MemberPeniz WHERE memberId = '$memberID'`, function(err, results) 
            if(err) 
                throw err;
            
            return results
        )

    
    const result = checkTimeoutMEMBERid(message.author.id);
    console.log(result)

但正如我所说,无论我传入什么 id,它都会返回 undefined

【问题讨论】:

警告通过将参数连接到您的 SQL 查询中,您可能会对SQL injection 敞开心扉。 当我们将 WHERE 子句作为测试时会发生什么,我们执行SELECT * FROM MemberPeniz ORDER BY memberid LIMIT 2 之类的操作? @spencer7593 它仍然返回 undefined 【参考方案1】:

这是因为,您将结果返回给回调函数,而回调函数不会返回调用者函数。您可以将函数更新为,

function checkTimeoutMEMBERid(memberId) 
return new Promise((resolve, reject) =>
    con.query(`SELECT * FROM MemberPeniz WHERE memberId = ?`,[memberId], (err, results) => 
        if(err) 
            return reject(err)
        
        resolve(results)
    )
  )

checkTimeoutMEMBERid(message.author.id)
.then(result =>

console.log(result)
)

【讨论】:

以上是关于试图制作返回 mysql 'SELECT * FROM' 结果的函数,最终返回 undefined的主要内容,如果未能解决你的问题,请参考以下文章

mySQL 5.7 使用新的 json 功能将行作为 json 返回

MYSQL5.7特性之GROUP BY 排序

MySql IN 子句,试图匹配元组的 IN 列表

MySQL操作命令(其二)

MySQL 嵌套连接排序

mysql Explain 性能分析关键字