javascript - JavaScript 中的错误 SQL 查询?
问题描述
在开始之前,我已经意识到通过 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 来做。然而,有些事情显然是错误的。如您所见,我想在控制台中查看结果。然而,我只剩下这个:
我不能说我是一个经验丰富的程序员——事实上,这只是某种实践项目,我是一名学生。因此,任何形式的帮助将不胜感激!
解决方案
您需要在 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);
});
推荐阅读
- css - DOMPDF div中的奇怪分页符
- java - java.lang.ClassNotFoundException:jdk.internal.reflect.GeneratedSerializationConstructorAccessor1
- css - docker容器内的iptables
- java - Java 序列化安全问题(不符合客户的安全标准)
- swift - XCode 13 SortOrder 不明确
- ruby - 设置一个 Ruby 类变量,然后在类方法中使用它。HTTP派对
- flutter - currentState null 颤动
- azure-data-factory-2 - 如何在 Web Activity 中使用数据集和linkedServices?
- html - 如何使用 CSS 在文本附近制作这样的线条?
- python - 使用递归时如何返回数组的长度?