我有这个sql语句:
selectAllUsersByCriteria = connection.prepareStatement( “SELECT * FROM Users WHERE?=?” );
运行语句的follow方法:
public ArrayList<User> getUsersByCriteria(String 1criteria, String 2criteria)
{
ArrayList<User> results = null;
ResultSet resultSet = null;
try
{
selectAllUsersByCriteria.setString( 1, 1criteria);
selectAllUsersByCriteria.setString( 2, 2criteria);
// executeQuery returns ResultSet containing matching entries
resultSet = selectAllUsersByCriteria.executeQuery();
results = new ArrayList< User >();
while ( resultSet.next() )
{
results.add( new User( resultSet.getString( "userName" ),
resultSet.getString( "Password" ),
resultSet.getBoolean( "AdminRights" ),
resultSet.getDouble( "Balance" )
) );
} // end while
} // end try
catch ( SQLException sqlException )
{
sqlException.printStackTrace();
} // end catch
finally
{
try
{
resultSet.close();
} // end try
catch ( SQLException sqlException )
{
sqlException.printStackTrace();
close();
} // end catch
} // end finally
return results;
}
它不起作用。我认为这是第一个?这就是问题所在。是不是可以设置WHERE?作为一个 ?。可以用另一种方式解决。
这是我要展示的表格,但只应显示用户遵循它符合两个标准。
答案 0 :(得分:0)
您需要将列名直接注入字符串。这会打开你的SQL注入攻击,所以我建议查询(并可能缓存)表的架构信息(特别是在INFORMATION_SCHEMA.COLUMNS
中找到)。
通过这种方式,您可以确保用户提交的列名与表中的某个列名匹配,然后将其注入脚本,方法是查看它是否在您的可用列列表中。