mysql语句WHERE为未知

时间:2015-04-10 15:48:32

标签: mysql executequery

我有这个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?作为一个 ?。可以用另一种方式解决。

这是我要展示的表格,但只应显示用户遵循它符合两个标准。

1 个答案:

答案 0 :(得分:0)

您需要将列名直接注入字符串。这会打开你的SQL注入攻击,所以我建议查询(并可能缓存)表的架构信息(特别是在INFORMATION_SCHEMA.COLUMNS中找到)。

通过这种方式,您可以确保用户提交的列名与表中的某个列名匹配,然后将其注入脚本,方法是查看它是否在您的可用列列表中。