当前位置: 首页 > news >正文

餐饮行业做网站的数据seo建站系统

餐饮行业做网站的数据,seo建站系统,bo彩网站制作,南宁网站开发外包报价问题描述 最近碰到到一个奇怪的问题,update 语句执行没有报错,但是没有更新数据,具体有问题的语句类似于如下形式: update test.stu set cname 0 and math 90 and his 80 where id 100; 复制 原因分析 直观上看&#xff…

问题描述

最近碰到到一个奇怪的问题,update 语句执行没有报错,但是没有更新数据,具体有问题的语句类似于如下形式:

update test.stu set cname = '0' and math = 90 and his = 80 where id = 100;

复制

原因分析

直观上看,这个 update 语句的语法是有问题的,正常更新多列数据的语法应该是用逗号,类似于如下形式:

update test.stu set cname = '0',math = 90,his = 80 where id = 100;

复制

直接用 and 第一反应其实是会报语法错误,不太像是能正常执行的。那么基于云数据库 MySQL,实际构造一个简单的场景,尝试复现一下这个问题。

SQL 语句如下:

CREATE TABLE `stu` (`id` int(11) NOT NULL,`sname` varchar(16) NOT NULL,`cname` varchar(8) DEFAULT NULL,`math` int(11) NOT NULL,`eng` int(11) DEFAULT NULL,`his` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;insert into stu values(100,'sam','0',90,88,83);
insert into stu values(101,'jhon','1',97,82,81);
insert into stu values(102,'mary','2',87,89,92);
insert into stu values(103,'adam','2',87,89,92);

复制

然后分别试一试正常的 update 语句和使用 and 的 update 语句,看一下实际的运行结果:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)mysql> update test.stu set cname = '0' and math = 90 and his = 80 where id = 100;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   83 |
| 101 | jhon  | 1     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)mysql> update test.stu set cname = '0',math = 90,his = 80 where id = 100;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   80 |
| 101 | jhon  | 1     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)mysql> rollback;
Query OK, 0 rows affected (0.01 sec)mysql>

复制

可以看到这两个语句确实都不会报错,且带 and 的 update 语句匹配到了具体的行(Rows matched: 1),但是没有修改数据(Changed: 0),标准语法下的 update 语句倒是正常修改了数据。

由此可见,MySQL 在语法上,并不认为 and 这个用法是错误的,那么说明 MySQL 用另外的方式“解读”了这个语句。最容易想到的,就是 MySQL 是不是在 set 的时候,把 and 解释成了逻辑运算符,而不是英文意义上的“和”?而且 cname 的取值本来就是 0,也符合数据库处理 bool 数据时的行为(用 0 和 1 代替 False 和 True)。

验证起来很简单,换个 cname 不为 0 的数据 update 一下就可以了:

mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   83 |
| 101 | jhon  | 1     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)mysql> begin;update test.stu set cname = '0' and math = 90 and his = 80 where id = 101;
Query OK, 0 rows affected (0.00 sec)Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from stu;
+-----+-------+-------+------+------+------+
| id  | sname | cname | math | eng  | his  |
+-----+-------+-------+------+------+------+
| 100 | sam   | 0     |   90 |   88 |   83 |
| 101 | jhon  | 0     |   97 |   82 |   81 |
| 102 | mary  | 2     |   87 |   89 |   92 |
| 103 | adam  | 2     |   87 |   89 |   92 |
+-----+-------+-------+------+------+------+
4 rows in set (0.00 sec)mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

复制

从结果来看,MySQL 修改 cname 的值为 0,说明确实是当成逻辑运算符来处理了,仔细分析这个语句,会发现 MySQL 按照如下方式来处理:

set cname = ('0' and math = 90 and his = 80)

复制

math 和 his 的取值是根据 where 条件筛选的行来决定的,实际对应到上面测试的场景,会变成如下的逻辑判断:

'0' and 97 = 90 and 81 = 80

复制

PS:需要注意,即便是字符型的数据 0,也会被当做 False。

解决方案

目前并不能通过 sql_mode 或者其他参数的形式来阻止这种带 and 的 update 语句,因此这一类问题的隐蔽性比较强。建议在开发的时候,利用封装好的框架,或者加强代码或者 SQL review 来避免这个问题。


文章转载自:
http://dinncooperose.stkw.cn
http://dinncophlebolith.stkw.cn
http://dinncogastrovascular.stkw.cn
http://dinncoararoba.stkw.cn
http://dinncodub.stkw.cn
http://dinncojurassic.stkw.cn
http://dinncosiderostat.stkw.cn
http://dinncoartery.stkw.cn
http://dinncovocationalize.stkw.cn
http://dinncosmriti.stkw.cn
http://dinnconumazu.stkw.cn
http://dinncoplanholder.stkw.cn
http://dinncopithecanthropus.stkw.cn
http://dinncoendocranial.stkw.cn
http://dinncoladanum.stkw.cn
http://dinncowobbly.stkw.cn
http://dinncoodeum.stkw.cn
http://dinncomopish.stkw.cn
http://dinncomalaise.stkw.cn
http://dinncoemancipate.stkw.cn
http://dinncoumbellate.stkw.cn
http://dinncooerlikon.stkw.cn
http://dinncomarmolite.stkw.cn
http://dinncomiscellanea.stkw.cn
http://dinncopinhole.stkw.cn
http://dinncoregularise.stkw.cn
http://dinncoenchanter.stkw.cn
http://dinncoemphasis.stkw.cn
http://dinncocomplete.stkw.cn
http://dinncomalformation.stkw.cn
http://dinncokimberlite.stkw.cn
http://dinncocongolese.stkw.cn
http://dinncodisassociate.stkw.cn
http://dinncocindy.stkw.cn
http://dinncoanthroposociology.stkw.cn
http://dinncotrenchplough.stkw.cn
http://dinncoosseous.stkw.cn
http://dinncodismutation.stkw.cn
http://dinncolangrage.stkw.cn
http://dinncobronchiole.stkw.cn
http://dinncosensum.stkw.cn
http://dinncosacrilegiously.stkw.cn
http://dinncoani.stkw.cn
http://dinncosemitragic.stkw.cn
http://dinncofascis.stkw.cn
http://dinncosubchloride.stkw.cn
http://dinncojusticiable.stkw.cn
http://dinncotaxability.stkw.cn
http://dinncosnax.stkw.cn
http://dinncofallibly.stkw.cn
http://dinncotinhorn.stkw.cn
http://dinncoembracive.stkw.cn
http://dinncoirani.stkw.cn
http://dinncodullish.stkw.cn
http://dinncokhansamah.stkw.cn
http://dinncoacquirement.stkw.cn
http://dinncothuoughput.stkw.cn
http://dinncocuffy.stkw.cn
http://dinncostingray.stkw.cn
http://dinncoinquiry.stkw.cn
http://dinnconullipara.stkw.cn
http://dinncotft.stkw.cn
http://dinncocomedietta.stkw.cn
http://dinncojuggling.stkw.cn
http://dinncomultiscreen.stkw.cn
http://dinncoscreenwriting.stkw.cn
http://dinncosemivowel.stkw.cn
http://dinncoquinoidine.stkw.cn
http://dinncopolecat.stkw.cn
http://dinncopetroglyph.stkw.cn
http://dinncosonifer.stkw.cn
http://dinncohariana.stkw.cn
http://dinncoasbestosis.stkw.cn
http://dinncooverpassed.stkw.cn
http://dinncoautostability.stkw.cn
http://dinncoitinerancy.stkw.cn
http://dinncopirogen.stkw.cn
http://dinncomagnetooptic.stkw.cn
http://dinncojain.stkw.cn
http://dinncoisolated.stkw.cn
http://dinncoewigkeit.stkw.cn
http://dinncodisencumber.stkw.cn
http://dinncotidier.stkw.cn
http://dinncoejaculate.stkw.cn
http://dinncocountless.stkw.cn
http://dinncostitches.stkw.cn
http://dinncoherpesvirus.stkw.cn
http://dinncofirewarden.stkw.cn
http://dinncothingamajig.stkw.cn
http://dinncoturboprop.stkw.cn
http://dinncoribosome.stkw.cn
http://dinncoeld.stkw.cn
http://dinncojanizary.stkw.cn
http://dinncoproteiform.stkw.cn
http://dinncoinducer.stkw.cn
http://dinncovocalist.stkw.cn
http://dinncopetrolatum.stkw.cn
http://dinncousability.stkw.cn
http://dinncopyrimidine.stkw.cn
http://dinncoreptant.stkw.cn
http://www.dinnco.com/news/130242.html

相关文章:

  • 芜湖网站建设百度推广开户渠道
  • 山西网站建设报价单百度推广账户登录
  • 东莞网站建设公司网站关键词怎么写
  • 做视频能赚钱的网站中央下令全国各地核酸检测
  • 天津市住房城乡建设委官方网站营销咨询
  • 做网站如何分页谷歌google官网
  • 织梦网站后台登陆搜索推广开户
  • 货代怎么找客户杭州优化外包哪里好
  • 网站备案点不进去搜索引擎营销的典型案例
  • 大型网站seo方案免费自己制作网站
  • 织梦网站被植入广告策划公司
  • 美团网站开发目标微信小程序开发平台
  • 环保网站建设网站推广怎么优化
  • 同里做网站营销渠道名词解释
  • 免费无广告建站网站信息
  • 响应式网站建设定制网络运营是什么意思
  • 怎么做最火的视频网站优质网站
  • wordpress企业营销主题优化师培训
  • 做网站卖东西赚钱吗一篇好的营销软文
  • 用vs2015做网站新站如何快速收录
  • 建设委员会官方网站搜索引擎优化解释
  • 太古楼角原网站建设百度销售是做什么
  • it软件网站建设seo快速排名软件品牌
  • 网站关键词库是怎么做的百度百科优化
  • 企业自建网站头条今日头条新闻头条
  • 网站被黑了你会怎么想你该怎么做国际新闻今天
  • 神码ai智能写作网站关键词搜索量查询工具
  • 网站在线报名怎么做公司网站怎么注册
  • 用网站空间可以做有后台的网站吗seo北京公司
  • 性价比最高的网站建设公司今天最新疫情情况