zoukankan      html  css  js  c++  java
  • 【mysql】当where后接字符串,查询时会发生什么?

    好久没有研究一个“深层次”的问题了。

    首先来看我们为什么要讨论这个问题~

    首先这是一个正常的数据库查询,我们可以看到在ruizhi数据库里的chouka表内,所有数据如图。

    现在,我们运行查询:

    select * from chouka where "qq=915620310";

    select * from chouka where "1qq=915620310";

    我们来看看结果:

    可以看到,第一句结果为空,第二句结果为全查。两句的差别在于,第二句的“”内,在第一句“”内的内容前加了一个1.

    为什么会出现这种情况呢?

    mysql在把字符串强转成数字有三种方式:

    方法一:SELECT CAST('123' AS SIGNED);
    方法二:SELECT CONVERT('123',SIGNED);
    方法三:SELECT '123'+0;

    where后的条件,最终是以数字的形式进行比较,换言之where后的条件,最终生成的结果都是数字,所以要发生字符串向数字的转换,转换规则如上。

    换句话说,如果字符串无法直接转换成数字,则字符串会进行前置数字正则匹配,成为最终的结果。我们来看看演示:

    好了,现在你应该明白如果where后跟的是字符串,那么判定条件究竟会发生如何的变化。

    我们为什么要探究这个问题呢?这是因为,在一些开发框架中,为了防止参数恶意注入,会对所有注入的参数“转化成字符串”,这时候,应该尤其注意这个规则,以避免出现全查/空集的情况。

  • 相关阅读:
    组件GIS 0 前言
    GIS数据结构与算法
    GIS数据结构与算法 0 前言
    Git推送本地工程到远程仓库
    为知笔记+Typora+PicGo发表博客园博客
    时间记录"时间块"的使用技巧
    WebGIS学习路线
    [c++指针教程]用简单链表练习指针
    动态规划题目整理
    图论刷题整理
  • 原文地址:https://www.cnblogs.com/sbhyc/p/10502308.html
Copyright © 2011-2022 走看看