【问题标题】:Difference between where and like in CLEARDBCLEARDB 中 where 和 like 的区别
【发布时间】:2021-02-04 17:37:55
【问题描述】:

我正在尝试一个简单的 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+'%"'
);

谁能指出为什么第一个查询不起作用?

这两种说法有什么区别?

N.B:这是我第一次在 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")
    }
  };

【问题讨论】:

    标签: sql node.js cleardb


    【解决方案1】:

    用途:

    const result = await database.query(
        'SELECT * FROM admin_cred WHERE username = "?" AND password = "?"', [username, password]
    );
    

    提示:切勿使用 LIKE 进行身份验证查询并尝试加密密码。

    【讨论】:

    • 对于您提到的第二个 sql,我收到此错误:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 '? 和密码附近使用的正确语法= ?'在第 1 行“我正在使用 Heroku 的 ClearDb,它与普通的 MySql 不同吗?
    • 它应该与任何其他 MySQL 实例相同。因此,请尝试在末尾使用分号并尝试使用引号。做一些组合引号+分号结尾,没有引号+分号结尾。如果您发布所有代码、您正在使用的库等,那就太好了。
    • 我修正了答案。跑了吗?
    • "SELECT * FROM admin_cred WHERE username = '"+[username]+"'" 这是我目前使用的。我不确定我遇到的所有不同版本的陈述之间有什么区别
    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多