2013-01-17 103 views
0

我是程序员学习者。查询中的字符串参数

我想MySQL查询从我的代码

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

以下格式

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

但它给

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

这里 “”(双引号缺失)

+0

为什么你需要双引号? –

+0

@MichaelArdan,因为他传递了'String'值。 'String'值应该用引号包装。 –

+0

然后用单引号代替 –

回答

4

越狱le引用\,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(); 

来源

1

您可以使用单引号代替。

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