SQL 结果长度,搜索时不显示任何内容
Posted
技术标签:
【中文标题】SQL 结果长度,搜索时不显示任何内容【英文标题】:SQL result lengths and showing nothing when searched 【发布时间】:2019-11-07 19:55:14 【问题描述】:我希望我的 Discord 机器人检查加入的用户是否存在于 mysql 表中。但是,当它发送查询时,它基本上告诉我它不存在,即使它应该存在。
这是我当前的代码:
bot.on('guildMemberAdd', async (member) =>
console.log(member.id)
let query = `SELECT userId FROM QR5PVGPh1D.users WHERE userId = '$member.id'`
let result = connection.query(query)
if(result.length > 0)
console.log("It works!")
)
【问题讨论】:
澄清一下,您是直接使用sql
包吗?
@slothiful 我正在使用mysql 连接、发送和接收数据
【参考方案1】:
节点是异步的,所以在这里你尝试在它被填充之前 console.log 结果... 您可以在此处找到更多信息:
Node JS MySQL query function not returning result
How do I return callback of MySQL query and push to an array in Node.js?
这是带有回调函数的代码。试试吧,它应该可以工作:
let query = `SELECT userId FROM QR5PVGPh1D.users WHERE userId = '$member.id'`
connection.query(query, function (err, result)
if (!err)
if (result.length > 0)
console.log("It works!")
);
【讨论】:
【参考方案2】:说明:
正如BadSpencer 所述,mysql
驱动程序是异步的,并且基于回调。
假设您打算接您的朋友去参加体育赛事。你不确定他们希望你什么时候来,所以你给他们打电话问他们。他们想了一会儿,然后告诉你一个时间。你得到了你要求的信息,所以你挂断了。在编程术语中,这将是同步代码的示例(有时被认为是 Node.js 中的“正常”代码)。
让自己回到同样的境地。然而,当你这次打电话给你的朋友时,他们很忙。你不想打扰他们,所以你让他们稍后给你打电话。你挂断了,但现在你等着。一个小时后,他们给你回电话,告诉你时间。这就是异步代码的思考过程。
屏幕后面还有很多内容,但为简单起见,我不会在这个答案中用所有这些信息轰炸你。
解决方案:
您应该传递一个函数作为回调函数,该回调函数将使用返回的数据。考虑这个例子:
let query = `SELECT userId FROM QR5PVGPh1D.users WHERE userId = '$member.id'`;
// Passing the callback function as the second parameter.
connection.query(query, (err, result) =>
if (err) return console.error(err);
if (result.length > 0) console.log('It works (it actually does).');
);
但是,由于结果的范围和代码的后续流程,这种基于回调的性质可能会成为一场噩梦。几次查询后,您的代码可能会变得混乱。为防止这种情况,您可以将查询包装在您自己的 Promise(或使用基于 Promise 的 mysql
包,如 promise-mysql
)和 await 调用中。
这是一个示例设置:
// Defining 'connection' as a parameter so
// you can export this function and use it
// anywhere.
function query(connection, sql)
return new Promise((resolve, reject) =>
connection.query(sql, (err, result) =>
if (err) reject(err);
else resolve(result);
);
);
// Asynchronous context needed for 'await' (this needs to be within an async function).
let query = `SELECT userId FROM QR5PVGPh1D.users WHERE userId = '$member.id'`;
let result = await query(connection, query)
.catch(console.error);
【讨论】:
以上是关于SQL 结果长度,搜索时不显示任何内容的主要内容,如果未能解决你的问题,请参考以下文章
jQuery UI 自动完成 - 输入与结果集不匹配时不显示结果
sqlplus“显示参数”结果列如何在glogin.sql为空时不包装