2014-01-11 75 views
0

所以我遇到了MySQL的一個問題。我有一項服務,允許管理員禁止用戶,並給出他們禁止的理由。這項服務完全用java編寫...雖然我可以使用PhP服務器並使用MySQL的功能來解決這個問題......我覺得我想把我所有的MySQL功能都保存在一個環境中。在MySQL查詢中使用撇號Java

問題出在於能夠給出一個理由,通常管理員會給出一些理由,如「你被禁止:悲傷鮑勃的城堡」(或者某種類型)。正如我們注意到的那樣,這個問題會導致問題,因爲這些問題是用來表示MySQL中的字符串的。

是在Java環境中有什麼辦法呢?

+4

如果撇號破壞了您的查詢,那麼您的系統嚴重不安全並且容易受到SQL注入攻擊。您需要立即開始查看**參數化查詢**。 –

+1

@ChrisHayes是正確的,他的建議不能被強調。有可用的圖書館將爲您處理消毒輸入,請利用它們。 – DopeGhoti

+0

你介意給我一些這些庫的例子,和SQL注入,我讀了它的wiki ...仍然困惑到底是什麼 – user3184090

回答

0

最簡單的解決方案可能是下議院郎StringEscapeUtils.escapeSql(String)。另一種解決方案是使用PreparedStatement並綁定這些參數(有些人更喜歡第二種選擇,因爲它通常通常規模更好,性能更快)。

// From the JavaDoc on PreparedStatement 
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES " 
           + "SET SALARY = ? WHERE ID = ?"); 
pstmt.setBigDecimal(1, 153833.00) 
pstmt.setInt(2, 110592)