【问题标题】:Faulty SQL query in JavaScript?JavaScript 中的错误 SQL 查询?
【发布时间】:2020-06-22 21:09:21
【问题描述】:

在开始之前,我已经意识到通过 JavaScript 连接到数据库所带来的风险。这个项目的问题在于,它的目的略有不同,所以我可以使用 JavaScript。

document.getElementsByClassName("option")[0].onclick = function() {
    event.preventDefault();
    var mysql = require('mysql');
    var con = mysql.createConnection({
        host: "localhost",
        user: "root",
        password: "",
        database: "dbname"
    });
    con.connect(function(err) {
        if (err) throw err;
        var email = document.getElementById("email").value;
        var password = document.getElementById("password").value;
        var sql = 'SELECT * FROM accounts WHERE email = ' + mysql.escape(email) + ' AND password = ' + mysql.escape(password);
        con.query(sql, function (err, result) {
            if (err) throw err;
            console.log(result);
        });
    });
}

所以,我以前在技术上用 PHP 做过这个。只是我现在用 JavaScript 来做。然而,有些事情显然是错误的。如您所见,我想在控制台中查看结果。然而,我只剩下这个了:

我不能说我是一名经验丰富的程序员——事实上,这只是某种实践项目,我是一名学生。因此,我们将不胜感激任何形式的帮助!

【问题讨论】:

  • 为什么要在<option>onclick 处理程序中运行代码?它可能应该在用户单击按钮时运行。

标签: javascript mysql


【解决方案1】:

您需要在 SQL 中引用字符串。您没有在电子邮件和密码周围加上引号。

但最好使用参数而不是将变量替换到 SQL 中,即使您对它们进行转义。

    var sql = 'SELECT * FROM accounts WHERE email = ? AND password = ?';
    con.query(sql, [email, password], function (err, result) {
        if (err) throw err;
        console.log(result);
    });

【讨论】:

  • 您好!我非常感谢您的提示和快速回答。但我仍然一定做错了什么。结果不会改变。
  • 如果result 为空,则没有与给定电子邮件和密码匹配的帐户。
  • 刚刚发现,问题是因为密码被加密了。我用了password_hash函数,请问有什么办法可以解决吗?
  • 在您可以使用@Barmar 的建议之前,您需要从现有密码中获取盐。您应该能够使用子字符串从 mysql 中获取它,然后在尝试验证整个密码之前使用它对密码尝试进行哈希处理。
猜你喜欢
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多