0

私はプログラマーの学習者です。

次の形式でMySQLクエリを取得したい

 select status from training where status in ("Open", "Delivered")

私のコードから

if(params.openCheckBox){
    query +=" ( t.status  IN ("+params.openCheckBox+", "+params.DeliveredCheckBox+")" 
    query +=" )"
}

しかし、それは与えます

   select status from training where status in (Open, Delivered)

ここに "" (ダブルクォーテーションがありません)

4

2 に答える 2

4

で二重引用符をエスケープ\、MySQL 文字列をラップするために二重引用符を受け入れます。

query +=" ( t.status  IN (\""+params.openCheckBox+"\", \""+params.DeliveredCheckBox+"\")" 
query +=" )"

または単一引用符を使用する

query +=" ( t.status  IN ('"+params.openCheckBox+"', '"+params.DeliveredCheckBox+"')" 
query +=" )"

上記のクエリは、sql injection. PreparedStatement以下のようなものを利用する

コードスニペット:

dbConnection = getDBConnection();
String query = "SELECT .... FROM .... WHERE t.status IN (?, ?)";
PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
preparedStatement.setString(1, params.openCheckBox);
preparedStatement.setString(2, params.DeliveredCheckBox);
ResultSet rs = preparedStatement.executeQuery();

ソース

于 2013-01-17T07:44:13.303 に答える
1

代わりに一重引用符を使用できます。

query +=" ( t.status  IN ('"+params.openCheckBox+"', '"+params.DeliveredCheckBox+"')"
于 2013-01-17T07:50:46.717 に答える