Heim  >  Artikel  >  Datenbank  >  mysql使用参数化查询,like模糊查询,应如何拼接字符串_MySQL

mysql使用参数化查询,like模糊查询,应如何拼接字符串_MySQL

WBOY
WBOYOriginal
2016-06-01 13:30:572675Durchsuche

bitsCN.com

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中有个全文检索,貌似是鸡肋。

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:MySQL的外键约束级联删除_MySQLNächster Artikel:MYSQL死锁案例_MySQL