0

私はこのSQL文を持っています:

selectAllUsersByCriteria = connection.prepareStatement( "SELECT * FROM ユーザー WHERE ? = ?" );

そして、ステートメントを実行する次のメソッド:

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 を設定することはできませんか? として ?。別の方法で解決できますか。

これは私が表示したいテーブルですが、それをフォローしているユーザーが 2 つの基準を満たしていることだけを示す必要があります。

4

1 に答える 1

0

列名を文字列に直接挿入する必要があります。これにより、SQL インジェクション攻撃にさらされる可能性があるため、テーブルのスキーマ情報 (具体的には にあります) を照会 (およびおそらくキャッシュ) することをお勧めしますINFORMATION_SCHEMA.COLUMNS

このようにして、ユーザーが送信した列名がテーブル内の列名の 1 つと一致することを確認してから、それが使用可能な列のリストにあるかどうかを確認して、スクリプトに挿入できます。

于 2015-04-10T15:56:43.740 に答える