ホームページ  >  記事  >  php教程  >  thinkphp复杂查询之数组混入字段比较

thinkphp复杂查询之数组混入字段比较

WBOY
WBOYオリジナル
2016-06-06 20:08:361534ブラウズ

标题比较绕口,我也不知道该怎样表达才好。大概意思就是:thinkphp 中的SQL语句查询,用到数组作为查询条件后,如何添加比较字段查询。 thinkphp手册上,推荐使用数组形式来作查询,这样安全性很高。但是我却遇到一个问题,当用数组形式来进行比较,就无法进

标题比较绕口,我也不知道该怎样表达才好。大概意思就是:thinkphp 中的SQL语句查询,用到数组作为查询条件后,如何添加比较字段查询。

thinkphp手册上,推荐使用数组形式来作查询,这样安全性很高。但是我却遇到一个问题,当用数组形式来进行比较,就无法进行字段比较了,比较郁闷。代码如下:

首先,我需要的SQL语句是这样的。

select * from post where (id = '100') and (user_id = `user`.user_id)

在TP用数组写法是这样的

$sql = M('post')
$map['id']??=?array('eq',100);
$map['user_id']??=?array('eq','user.user_id');
$sql->where($map)->$sql;

生存的SQL语句会这样:

select * from post where (id = '100') and (user_id = 'user.user_id')

后部分的字段比较,因为多了单引号,变成一个比较字符串了。不是我想要的语句。

翻篇了thinkphp官网手册也没有找到解决方案,谷歌百度也没有找到。后来灵机一动,不清楚where是否可以重复写多次两次?将代码改成如下:

$sql = M('post')
$map['id']??=?array('eq',100);
$sql->where($map)->where('user_id = user.user_id')->$sql;

执行$sql->getlastsql();打印获得以下SQL:

select * from post where (id = '100') and (user_id = `user`.user_id)

噢!这正是我需要的SQL语句。看来where的确是可以重复调用的。

最后吐槽一下thinkphp手册,上面很多知识点都没有提及到。看着真的点有辛苦。还好这点辛苦是值得的。现在thinkphp用着很舒服。 :)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。