mysql使用參數化查詢,like模糊查詢,應如何拼接字符串 好奇是學習的源動力:因為在群裡潛水看到關注sql注入的討論,嘗試在自己程序的搜索框輸入單引號,程序報錯,開始嘗試修改為參數化查詢,噩夢開始了。。 搬出了畢業時寫的DBHelper(很早寫的使用參數化查詢的操作類),替換掉程序中為了方便精簡(姑且這麼說吧)的DBHelper。 開始安裝平常的邏輯拼接:sql += " where t.realName like '%?realName%'";//失敗了,無論如何都查不出來數據。 失敗原因:據說是因為'' 引號包裹了?realName,程序認為這是個字符串,不是關鍵字,不進行解析了。 此後我又試了類似這樣的格式,各種拼接方式, 如:sql += " where t.realName like '%"+"?realName"+"%'";//想要將?realName作為參數,來讓程序識別,基礎不牢的弊病有暴露了,被高手指出,這明明就是拼接字符串嘛,羞愧難當。 繼續請教,得出如下:sql += " where t.realName like '%'+?realName + '%'";//拋出異常,還是不行。 然後我想換一種方式,借著以前高手的思路:如果兩表之間沒有關系,就創造關系。//這句話對我影響很大,受益匪淺。 當時是mssql,有2,4,5,16這樣的數據格式,這些數字都是另外一張表的標識列,使用charindex來進行關聯。跑題了------- 我經過google查詢,使用了如下sql:sql += " where instr(t.realName,?realName)>0";//能正常查詢了,又有點擔心某位大神說的,查詢使用函數,會造成無法使用索引,造成性能下降,擔憂。。 午飯後:基友Alex寫來一份Sql語句,嘗試下,如下:sql += " where t.realName like concat(?realName,'%')";//查詢成功,這個是mysql中特有的拼接字符串的方式,著實讓我蛋疼。。。題外篇:mssql是用+號拼接,oracle是用||拼接,mysql就是concat(var1,var2,.....)拼接 總結:1,雖然在前幾天幫助同事用concat函數搞定了一個查詢,但是到自己使用,卻頭腦不靈光,慚愧。 2,在畢業時,還整天寫參數化查詢,工作了卻不斷找尋偷懶的方法,人變壞了。 3,基礎不牢,早晚有一天要補的,我就吃虧了。 4,關於查詢中使用函數是否會造成索引失效,有待高手回答。 5,mysql中有個全文檢索,貌似是雞肋。