首页 » PHP教程 » phpmysql反斜杠技巧_MySQL 中的反斜杠 真是太坑了

phpmysql反斜杠技巧_MySQL 中的反斜杠 真是太坑了

访客 2024-11-13 0

扫一扫用手机浏览

文章目录 [+]

在我们平时操作SQL中,一不把稳这些符号就会给你背上一口锅。

你还别不信,听叔一句劝,这里的水很深,有些东西,你把握不住…《潘嘎之交》好了,本日咱们就一起针对最膈应人的反斜杠(\),来看看都有哪些坑。

phpmysql反斜杠技巧_MySQL 中的反斜杠 真是太坑了

一、INSERT语句中有反斜杠(\)1、实际测试

咱们用下面这些SQL来测试一下反斜杠(\)在INSERT语句中会是啥样?

phpmysql反斜杠技巧_MySQL 中的反斜杠 真是太坑了
(图片来自网络侵删)

INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\陈哈哈\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\陈哈哈\\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\\陈哈哈\\\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\\\陈哈哈\\\\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\\\\陈哈哈\\\\\加班');

插入后的结果:

mysql>selectfromdemo0526;+----+-----------------------+|id|text|+----+-----------------------+|1|D:陈哈哈加班||2|D:\陈哈哈\加班||3|D:\陈哈哈\加班||4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班|+----+-----------------------+5rowsinset(0.00sec)

我们创造结果如下:

当字符串中有1个反斜杠,插入后算0个。

当字符串中有2个反斜杠,插入后算1个。

当字符串中有3个反斜杠,插入后算1个。

当字符串中有4个反斜杠,插入后算2个。

当字符串中有5个反斜杠,插入后算2个。

2、是啥事理?

后来创造,缘故原由实在很大略,在MySQL中,反斜杠在字符串中是属于转义字符,经由语法解析器解析时会进行一次转义,以是当我们insert反斜杠(\)字符时,如 insert “\” 在数据库中终极只会存储"",第一个反斜杠(\)被当做转义字符处理。

同理,像这种 D:\\陈哈哈\\加班 字符串,语法解析器解析到第三个反斜杠(\)时,又会把它当做下一个转义字符进行处理,因此D:\\陈哈哈\\加班入库后变成了D:\陈哈哈\加班。

以是我们在代码中处理插入语句碰到反斜杠时,把稳\是否已经改成\,否则入库后字符串会不一致。

二、SELECT查询反斜杠(\)1、实际测试

我们还是沿用上面的表数据,直接用like模糊匹配来测试一下。

mysql>selectfromdemo0526;+----+-----------------------+|id|text|+----+-----------------------+|1|D:陈哈哈加班||2|D:\陈哈哈\加班||3|D:\陈哈哈\加班||4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班|+----+-----------------------+

我们先用单个反斜杠和两个反斜杠看看能查到啥玩意儿

mysql>SELECTfromdemo0526wheretextlike'%\%';Emptyset(0.00sec)mysql>SELECTfromdemo0526wheretextlike'%\\%';Emptyset(0.00sec)

啊!

我们用like '%%'、like '%\%'查询后创造都查不到数据,纳尼?上面的我白学了吗?

别焦急,我会见告你SELECT语句中四个反斜杠(\\)代表一个么?呀,我赶紧换成like '%\\%'试一试。

mysql>SELECTfromdemo0526wheretextlike'%\\\\%';+----+-----------------------+|id|text|+----+-----------------------+|2|D:\陈哈哈\加班||3|D:\陈哈哈\加班||4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班|+----+-----------------------+4rowsinset(0.00sec)

喔?那我如果查询表中带有两个反斜杠(\)的数据,岂不是要like八个。



别拦我,我看看tm是谁设计的这规则。

mysql>SELECTfromdemo0526wheretextlike'%\\\\\\\\%';+----+-----------------------+|id|text|+----+-----------------------+|4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班|+----+-----------------------+2rowsinset(0.00sec)2、又是啥事理?

原来在mysql的like语法中,like后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。
因此如果期望终极匹配到"",就要反转义两次,也便是由"\\"到"\"再到""。

如果是普通的精确查询(=),则无需第二次的正则转义,和INSERT语句一样。

mysql>SELECTfromdemo0526wheretext='\\\\';+----+------+|id|text|+----+------+|7|\\|+----+------+1rowinset(0.00sec)总结

好了,看到这里同学们有什么感想熏染呢?是不是创造MySQL中还是存在很多未便利的语法,进步空间还很大呀~~

在日常事情中,也会常常碰到这种符号引发的问题,尤其是用户在界面填写的数据,建议要做干系限定,明确哪些符号不许可。

作者:陈哈哈

原文链接:https://blog.csdn.net/qq_39390545/article/details/117296607

标签:

相关文章

易语言411,创新编程语言的里程碑

自计算机问世以来,编程语言的发展日新月异。在众多编程语言中,易语言以其独特的语法、易学易用的特点,受到了广大编程爱好者的喜爱。如今...

PHP教程 2024-12-28 阅读0 评论0

45岁IT女,跨越年龄界限,绽放职场光彩

在当今社会,女性在职场上的地位逐渐提升,越来越多的女性勇敢地走出家门,追求自己的事业。而在这个庞大的女性群体中,45岁的IT女更是...

PHP教程 2024-12-28 阅读0 评论0

CSS3去色技术,色彩艺术的创新演绎

随着互联网技术的飞速发展,网页设计已成为一门综合性艺术。而CSS3去色技术作为网页设计的重要手段,为色彩艺术的创新演绎提供了无限可...

PHP教程 2024-12-28 阅读0 评论0