MySQL SELECT 不检查值是否准确
MySQL SELECT doesn't checks if the value is exact
我目前正在使用 JS、DiscordJS 和 MySQL 并尝试从 table 获取一些数据,这些数据通常总是工作正常。但是我正在努力处理 MySQL SELECT 查询,因为它不会检查 table 中的值是否与它正在搜索的值完全相同。 Discord ID 的末尾与其正在搜索的不同。
代码:
let query = `SELECT * FROM accounts WHERE DiscordID = ${interaction.member.id}`;
console.log(`QUERY: ` + query);
MySQL.Connect()
.then((connection) => {
MySQL.Query(connection, query)
.then((results) => {
if (results == '') {
console.log('[RESULTS = 0]');
console.log(results);
} else {
console.log('[RESULTS > 0]');
console.log(results);
}
})
.catch((error) => {
console.log(error);
})
.finally(() => {
connection.end();
});
})
.catch((error) => {
console.log(error);
});
结果:
QUERY: SELECT * FROM accounts WHERE DiscordID = 466934561738326016
RESULT:
ID: 1,
Username: 'Test',
Password: 'Test',
DiscordID: '466934561738326022'
MySQL 架构:
CREATE TABLE IF NOT EXISTS `accounts` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Username` VARCHAR(255) NOT NULL,
`Password` VARCHAR(255) NOT NULL,
`DiscordID` VARCHAR(100) NOT NULL,
PRIMARY KEY (`ID`));
你被MySQL对数字的处理给坑了。
你说,
SELECT * FROM accounts WHERE DiscordID = 466934561738326016
MySQL 把那个长数字默默地转换成 IEEE 754 64-bit floating point number,失去了精度。做 SELECT 466934561738326016;
得到你 466934561738326000
。有时会匹配错误的 DiscordID。 !!
如果您在 ID 周围加上引号,那么 MySQL 会将 ID 值原封不动地保留为文本字符串。有效。
SELECT * FROM accounts WHERE DiscordID = '466934561738326016'
在这里查看。 fiddle
我目前正在使用 JS、DiscordJS 和 MySQL 并尝试从 table 获取一些数据,这些数据通常总是工作正常。但是我正在努力处理 MySQL SELECT 查询,因为它不会检查 table 中的值是否与它正在搜索的值完全相同。 Discord ID 的末尾与其正在搜索的不同。
代码:
let query = `SELECT * FROM accounts WHERE DiscordID = ${interaction.member.id}`;
console.log(`QUERY: ` + query);
MySQL.Connect()
.then((connection) => {
MySQL.Query(connection, query)
.then((results) => {
if (results == '') {
console.log('[RESULTS = 0]');
console.log(results);
} else {
console.log('[RESULTS > 0]');
console.log(results);
}
})
.catch((error) => {
console.log(error);
})
.finally(() => {
connection.end();
});
})
.catch((error) => {
console.log(error);
});
结果:
QUERY: SELECT * FROM accounts WHERE DiscordID = 466934561738326016
RESULT:
ID: 1,
Username: 'Test',
Password: 'Test',
DiscordID: '466934561738326022'
MySQL 架构:
CREATE TABLE IF NOT EXISTS `accounts` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Username` VARCHAR(255) NOT NULL,
`Password` VARCHAR(255) NOT NULL,
`DiscordID` VARCHAR(100) NOT NULL,
PRIMARY KEY (`ID`));
你被MySQL对数字的处理给坑了。
你说,
SELECT * FROM accounts WHERE DiscordID = 466934561738326016
MySQL 把那个长数字默默地转换成 IEEE 754 64-bit floating point number,失去了精度。做 SELECT 466934561738326016;
得到你 466934561738326000
。有时会匹配错误的 DiscordID。 !!
如果您在 ID 周围加上引号,那么 MySQL 会将 ID 值原封不动地保留为文本字符串。有效。
SELECT * FROM accounts WHERE DiscordID = '466934561738326016'
在这里查看。 fiddle