我有一個簡單的項目,在用戶註冊結束時,它通過mySql數據庫中該用戶的名稱創建特定的表。在mysql中使用java創建表
連接到DB後。對於ExecutingUpdate功能:
public String UpdateDBQuery(String query) throws IOException{
try {
int ursa = st.executeUpdate(query);
if (ursa == 0) {
throw new SQLException("Creating user failed, no rows affected.");
} else {
return "succeed";
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
調用函數:
String DBOutput = connect.UpdateDBQuery("CREATE TABLE '"+UserName+"' (ID INT(20) AUTO_INCREMENT PRIMARY KEY, PROFILEIMAGES VARCHAR(100), REG_DATE timestamp)");
但我上面的代碼通過一個異常說:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''jasdfhkjhasdkfj' (ID INT(20) AUTO_INCREMENT PRIMARY KEY, PROFILEIMAGES VARCHAR(' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
雖然我尋遍網絡,但無法發現問題。
所有答覆都非常感激:)
這些類型的查詢更傾向於Sql注入,在這種情況下,您的字符串'UserName'的值是''jasdfhkjhasdkfj' – Noushad
您可以在控制檯上成功執行查詢嗎? –
非常感謝您通知我有關此漏洞的信息我可能會以某個名稱保存用戶名,但您能否告訴我顯示該異常的問題是什麼? – jack