码迷,mamicode.com
首页 > 数据库 > 详细

错误sql语句: `name` = "aa" = "bb"的语义转化

时间:2021-02-18 13:09:04      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:相等   com   tps   rom   转换   http   date   ble   等于   

假设不小心写错了sql的条件,写成了 `name` = "aa" = "bb",总结sql的语义转化如下:

  • update 语句的set条件中
    update table set `name` = "aa" = "bb";==>:update table set `name` = ("aa" = "bb");

   由于 select ("aa" = "bb") 得到结果零,因此  

   update table set `name` = ("aa" = "bb"); ==>:update table set `name` = 0; 

  • select 语句的where条件中

  select * from talbe where `name` = "aa" = "bb";==> select * from talbe where (`name` = "aa") = "bb"; 

  如果 `name`跟"aa"是否相等,相等则(`name` = "aa") 得到结果值为1,否则得到结果0,而1或者0与"bb"进行比较,相当于int与string比较,因此都转换为float进行比较,隐式转换"bb"得到结果0,当(`name` = "aa") 值为0时,相当于0=0,恒等于1,于是当(`name` = "aa")为0时结果恒成立,相当于select * from talbe where 1=1;因此可以得到`name` != "aa"的结果。

参考自https://mp.weixin.qq.com/s/PgFdy4rlfCayauYFphDFTg 

错误sql语句: `name` = "aa" = "bb"的语义转化

标签:相等   com   tps   rom   转换   http   date   ble   等于   

原文地址:https://www.cnblogs.com/smallzhen/p/14405734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!