Mysql中where條件自動類型轉換的坑


我有張表,其主鍵id字段為varchar(5),內容是5位隨機不重復字符串
表的內容大概是這樣的

id name
s8bk2 admin
9f0ps username

在一個方法中我查詢了這張表,代碼大概是這樣的

 function get($id = 0){
    $q = query('select * from user where id='.$id);
    // 如果$q內有記錄時則顯示出來,無記錄時顯示用戶不存在
}

 

我不知道你們有沒有看出問題,我當時反正是覺得沒問題 於是代碼順利運行起來。后來發現了一個奇怪的問題,當我不傳入id(即$id=0)時,頁面總是顯示第一位用戶的信息,而不是報錯說用戶不存在 這就很奇怪了,我的表里既沒有id為0的用戶,也沒有id開頭是0的用戶,這到底是怎么回事? 檢查了一下sql查詢的返回值,居然把所有記錄都查出來了,這就更奇怪了 經過各種debug無果,我懷疑mysql和php一樣,具有一定的自動類型轉換功能 於是我給0加上了單引號,sql語句變為  

select * from user where id='0'

  

執行之后,bug成功解決

看來的確如此,我的id字段是字符串型,當我用整數型0作為where條件去與其比對時,字符串id被自動轉為整數型,也就成了0。自然就把所有記錄都給匹配出來了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM