ThinkPHP 條件是一個表里面的兩個字段比較
今天群里有人問,thinkphp框架,條件是一個表里的兩個字段,怎么查詢。
然后就做了下測試:
比如查詢出 手機號就是微信號 的用戶:
(1)首先,正常的sql語句應該是這樣的:
SELECT `id`,`name`,`tel`,`weixin` FROM `user` WHERE `tel` = `weixin`
然后在thinkphp框架中測試:
(2)當where條件是字符串時,肯定是可以的:
M('user')->where('`tel`=`weixin`')->field('id,name,tel,weixin')->select();
字段不加反引號【`】也是可以的:
M('user')->where('tel=weixin')->field('id,name,tel,weixin')->select();
(3)當where條件使用數組時,測試不可以,字段會被當做字符串,比較時轉化為了0:
M('user')->where(['tel'=>"`weixin`"])->field('id,name,tel,weixin')->select();
打印出sql是:SELECT `id`,`name`,`tel`,`weixin` FROM `user` WHERE `tel` = 0。
M('user')->where(['tel'=>'`weixin`'])->field('id,name,tel,weixin')->select();
打印出sql是:SELECT `id`,`name`,`tel`,`weixin` FROM `user` WHERE `tel` = 0。
M('user')->where(['tel'=>`weixin`])->field('id,name,tel,weixin')->select();
打印出sql是:SELECT `id`,`name`,`tel`,`weixin` FROM `user` WHERE `tel` = null 。
結論:
使用單引號、雙引號時,都會被當做字符串,比較時當做0來查詢,
不用引號時,當做null來查詢,
所以可以使用字符串的查詢方式,數組沒有查到好的解決辦法,
歡迎大家指導!