2015-12-02 71 views
1

即時通訊嘗試在我的servlet控制器中運行與我的數據庫中的名稱相匹配的id的查詢。使用查詢IM是MySQL查詢錯誤,查詢將無法正常工作

String query="SELECT *FROM entry WHERE id ="+id2+"AND name="+sname; 

,但我不斷收到寫着

「正確的語法在1號線附近使用 'NAME =瑪麗珍'」 的錯誤

即時通訊相當確定我的查詢是正確的,當我運行它的AND名稱部分它的工作。所以我不知道爲什麼它不會與AND名稱部分一起工作,除非我的查詢在這方面是錯誤的。有任何想法嗎?

回答

0

串聯字符串是第一步到SQL注入攻擊!

如果你想去這個路徑添加空格:如果需要添加'引用字符串字面

String query="SELECT * FROM entry WHERE id = "+id2+" AND name= "+sname; 

String query="SELECT * FROM entry WHERE id = "+id2+" AND name= '"+sname + "'"; 

編輯:

你真的應該使用PreparedStatement like:

String query="SELECT * FROM entry WHERE id = ? AND name = ?"; 
PreparedStatement ps = con.prepareStatement(query); 

ps.setInt(1, id2); 
ps.setString(2, sname); 
+0

對不起,我更新了答案後刪除了我的評論。無論如何,我會強烈建議**在這裏使用[PreparedStatement](http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)。 –

+0

@JozefChocholacek Yup Prepared Statement就是這樣。連串字符串只適用於學校作業,這是非常糟糕的做法 – lad2025

+0

感謝您的幫助,我會使用準備好的語句,但我想確保我的querys是第一次工作,非常感謝您的所有幫助! – user3225981