程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql使用參數化查詢,like模糊查詢,應如何拼接字符串

mysql使用參數化查詢,like模糊查詢,應如何拼接字符串

編輯:MySQL綜合教程

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中有個全文檢索,貌似是雞肋。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved