很久沒有研究一個「深層次」的問題了。mysql
首先來看咱們爲何要討論這個問題~sql
首先這是一個正常的數據庫查詢,咱們能夠看到在ruizhi數據庫裏的chouka表內,全部數據如圖。數據庫
如今,咱們運行查詢:框架
select * from chouka where "qq=915620310";ui
select * from chouka where "1qq=915620310";spa
咱們來看看結果:3d
能夠看到,第一句結果爲空,第二句結果爲全查。兩句的差異在於,第二句的「」內,在第一句「」內的內容前加了一個1.blog
爲何會出現這種狀況呢?開發
mysql在把字符串強轉成數字有三種方式:字符串
方法一:SELECT CAST('123' AS SIGNED);
方法二:SELECT CONVERT('123',SIGNED);
方法三:SELECT '123'+0;
where後的條件,最終是以數字的形式進行比較,換言之where後的條件,最終生成的結果都是數字,因此要發生字符串向數字的轉換,轉換規則如上。
換句話說,若是字符串沒法直接轉換成數字,則字符串會進行前置數字正則匹配,成爲最終的結果。咱們來看看演示:
好了,如今你應該明白若是where後跟的是字符串,那麼斷定條件究竟會發生如何的變化。
咱們爲何要探究這個問題呢?這是由於,在一些開發框架中,爲了防止參數惡意注入,會對全部注入的參數「轉化成字符串」,這時候,應該尤爲注意這個規則,以免出現全查/空集的狀況。