无法从mysql数据库中删除记录

utugiqy6  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(347)

试图从数据库中删除记录,但在“where子句”中出现错误“未知列”。

private void deleteUser() {
    String query = "DELETE FROM user WHERE Name =" + tfemail.getText() + "";
    executeQuery(query);
    showUsers();
}


4dc9hkyq

4dc9hkyq1#

你不能这样写查询。想象一下有人把 tfemail 此文本字段:

"Joe' OR FALSE"

让我们看看这会对sql查询产生什么影响:

DELETE FROM user WHERE Name = 'Joe' OR FALSE;

再见,数据库!
有些数据库允许您在数据库引擎运行的服务器上执行一些内容。这意味着这个技巧可以用来完全破解机器或者完全格式化磁盘。再见,整个机器。
这也意味着你的 executeQuery 方法需要删除-抽象(“这里有一些sql,请运行它”)很少有用(因为它不能包含任何用户输入),并诱使您编写安全漏洞。
溶液的配制方法如下:

PreparedStatement ps = con.prepareStatement("DELETE FROM user WHERE Name = ?");
ps.setString(1, "Joe");
ps.executeUpdate();

这就解决了你的问题,而且很安全- ps.setString(1, "Joe' OR FALSE"); 现在不再是一个问题(db引擎或jdbc驱动程序保证它会处理这个问题;其效果是删除用户表中的条目,该条目的字面意思是“joe”或“false”)。
此外,在数据库中存储密码是不可接受的策略;解决方案是bcrypt:使用专门为存储密码而设计的哈希算法。

von4xj4u

von4xj4u2#

String query = "DELETE FROM user WHERE Name ='" + tfemail.getText() + "'";
                                             ^                         ^
                                             |___________add___________|

相关问题