sql - CLEARDB 中 where 和 like 的区别
问题描述
我正在尝试一个简单的 nodejs 登录系统,并希望使用以下查询:
"SELECT * FROM admin_cred WHERE username = '?' AND password = '?'", [username], [password]
但它根本不返回任何东西,所以我不得不这样做:
'SELECT * from admin_cred where username like "%'+username+'%" AND password like "%'+password+'%"'
这是代码段:
const result = await database.query(
"SELECT * FROM admin_cred WHERE username = '?' AND password = '?'", [username], [password]
// 'SELECT * from admin_cred where username like "%'+username+'%" AND password like
"%'+password+'%"'
);
谁能指出为什么第一个查询不起作用?
这两种说法之间的区别是什么?
注意:这是我第一次在 heroku 上使用 cleardb,有些东西似乎与 MySql 不同。代码中的其他所有内容都有效,因此我缩小了问题范围
编辑 1
我刚刚注意到第二个查询正在运行,即使密码错误
更新 1 这是所要求的节点 js 代码:
class auth {
constructor(app, database) {
this.login(app, database);
}
//http://localhost:8000/api/auth/v1/login
login(app, database) {
app.post("/api/auth/v1/login", async (request, response) => {
const username = request.body.username;
const password = request.body.password;
try {
const result = await database.query(
"SELECT * FROM admin_cred WHERE username = '?'", [username]
);
console.log(result);
if(result.length > 0){
if(password === result[0].password){
response.json({
loggedIn:"true",
data: username
})
}else{
response.json({
loggedIn:"false",
data: "wrong username or pass"
})
}
}else{
response.json({
loggedIn:"false",
data:"username doesnt exist"
})
}
} catch (error) {
console.log(error);
}
});
}
}
这是来自 ReactJs 的发布请求:
const handleLogin = async (e) =>{
e.preventDefault();
const admin = {username, password};
const response = await axios.post(
"http://localhost:8000/api/auth/v1/login",
admin
);
if(response.length > 0){
console.log("response: " + response);
}else{
console.log("no response")
}
};
解决方案
利用:
const result = await database.query(
'SELECT * FROM admin_cred WHERE username = "?" AND password = "?"', [username, password]
);
提示:切勿使用 LIKE 进行身份验证查询并尝试加密密码。
推荐阅读
- c - 打印到屏幕内核基础知识
- python - 是否可以使用两个集线器映像(Python 3.7.3 和 Ubuntu 18.0.4)构建 docker 容器?
- operator-overloading - 不能为我的班级重载逻辑运算符(或、和)
- google-cloud-platform - GCP 实例之间的高速通信
- javascript - 选择器参数已更改,但未调用渲染
- swift - 在 SwiftUI 视图中嵌入视频
- python - 剪切 os.system 的输出的一行并将其写入文件
- laravel - 是否值得创建 2 个单独的 Laravel 项目?
- powershell - 如何将变量从 Windows 窗体传递给 exe
- python - 从没有包依赖的 yml 文件创建 conda 环境