繁体   English   中英

PreparedStatement中的MySQL语法错误

[英]Mysql syntax error in preparedstatement

我有一个简单的准备好的语句,用于更新MySQL数据库中的记录。 表,列,目标属性和信息取自文本字段。 首先,我没有准备好的语句,但是如果用户选择插入引号或%% $&^ *其他符号,该程序很容易损坏。

现在我得到这个:

UPDATE客户端SET'full_name'= Martinajh WHERE id ='5'com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的``selectedTable2'SET'namec'='cellValue'WHERE id == 5'附近使用

String cellValue3 = String.valueOf( table.getValueAt(row, 0) );
int id = Integer.parseInt(cellValue3);
String selectedTable2 = (String) listOfTablesNames.getSelectedValue();
String cellValue = String.valueOf( table.getValueAt(row, column) );
String namec = table.getColumnName(column);
String query ="UPDATE ? SET ? = ? WHERE id== ?";
PreparedStatement preparedStmt = (PreparedStatement) conn.prepareStatement(query);
preparedStmt.setString   (1, "selectedTable2");
preparedStmt.setString(2, "namec");
preparedStmt.setString(3, "cellValue");
preparedStmt.setInt(4, id);
preparedStmt.executeUpdate();

您不能使用表名作为参数来构造一个preparedstatement。 您需要使用String.format构造带有字符串连接/占位符的SQL。 准备的语句用于列值,而不用于表名。 在您的情况下:

String query ="UPDATE `" + selectedTableVar + "` SET `" + fieldNameVar + "` = ? WHERE id = ?";
//...
preparedStmt.setString(1, "cellValue");
preparedStmt.setInt(2, id);

另外, id = ? 作为@C。 提到赫林。

至于清理selectedTableVarfieldNameVar变量,我现在找不到链接,但是您可以自己研究MySQL中什么是有效的限定符... AFAIK,任何UTF字符都是有效的,大多数特殊符号可能可以是有效表名的一部分,等等。使用上面建议的语法,您应该不应该允许`字符防止注入,我想就是这样。 但是,必须对其进行调查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM