2011-05-01 38 views
2

我想使用SQL WHERE子句搜索包含单引号的字符串。例如,我想搜索“Tom's house”,并且SQL子句应该是“location ='Tom's house'”。任何人都可以帮我格式化SQL子句吗?如何使用SQL WHERE子句搜索包含单引号的字符串

+0

有人请解释这个家伙如何使用参数化查询 – 2011-05-01 11:25:34

+1

@ T.J .:相信我,如果我知道任何Java或Android的话。 – 2011-05-01 11:27:48

回答

1

双单引号Tom''s house

+0

非常感谢,它的工作原理! – Sirius 2011-05-01 11:29:26

+0

如果您无法完全控制将会代替“汤姆之家”的内容,那么您最好使用TJ的方法。有人可能会放置'\'',然后用强大的SQL语言控制声明的其余部分,这可能会让黑客访问其他数据,具体取决于声明。这就是为什么手动转义不是很好的做法。 – 2011-07-13 14:22:27

7

如果你正在做的查询从字面上看,你可以双击了'所以它的Tom''s house作为SQLMenance说。

更好的通用解决方案,虽然是通过java.sql.PreparedStatement使用参数化查询,如:

PreparedStatement ps; 
ResultSet rs; 

// Create the prepared statement 
ps = con.prepareStatement("SELECT x FROM table WHERE location = '?'"); 

// Set the parameter -- we don't have to quote it, the SQL classes do that 
ps.setString(1, "Tom's House"); 

// Do it 
rs = ps.executeQuery(); 

这不仅解决了报价为您解决问题,但更重要的是它可以帮助保护您免受SQL injection攻击你的数据库。 永不包括任何用户提供的数据“原样”通过字符串连接等查询,要么使用参数化查询或使绝对确信您正在预先正确地转义数据。

0

准备语句API的使用避免了这些问题。

相关问题