ホームページ >バックエンド開発 >PHPチュートリアル >ThinkPHP での where() の使用方法の詳細な説明

ThinkPHP での where() の使用方法の詳細な説明

不言
不言オリジナル
2018-06-06 14:36:382545ブラウズ

この記事では主に ThinkPHP の where() の使い方について詳しく説明します。必要な方は参照してください。

データベース操作の結果。つまり、SQL クエリ ステートメントの where 句です。この記事では、ThinkPHP の where() の使用法を詳しく説明します。興味のある方は参考にしてください。この記事では、ThinkPHP の where() メソッドの使用法を紹介します。 where メソッドを使用すると、データベース操作の結果をフィルタリングできます。つまり、SQL クエリ ステートメントの where 句です。

今日は、最も一般的に使用される、しかし最も複雑なクエリの where メソッドについて説明します。 where メソッドは、モデル クラスの一貫した操作メソッドの 1 つでもあり、主にクエリと動作条件の設定に使用されます。

where メソッドの使用は、ThinkPHP クエリ言語の本質であり、通常のクエリ、式クエリ、クイック クエリ、間隔クエリ、結合クエリなどのクエリ操作を完了できる重要な部分です。 where メソッドのパラメーターは文字列と配列をサポートしていますが、オブジェクトも使用できますが、お勧めしません。

文字列条件文字列条件を使用してクエリや直接操作を行います。例:

$User = M("User"); // 实例化User对象
$User->where('type=1 AND status=1')->select();

最後に生成された SQL ステートメントは

SELECT * FROM think_user WHERE type=1 AND status=1

バージョン 3.1 以降を使用している場合文字列条件を使用する場合は、

$Model->where("id=%d and username='%s' and
xx='%f'",array($id,$username,$xx))->select();

のような前処理メカニズムと連携して、セキュリティを強化することをお勧めします。または URL アドレスが数値以外の型で渡された場合、クエリの前に強制的に数値形式にフォーマットされます。

文字列前処理形式タイプは、数値、文字列などの指定をサポートしています。詳細については、vsprintf メソッドのパラメーターの説明を参照してください。

配列条件


配列条件の使用法は、ThinkPHP が推奨する使用法です。

通常のクエリ

最も単純な配列クエリメソッドは次のとおりです:

$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
最終的に生成されるSQLステートメントは

$User = M("User"); // 实例化User对象
$map['name'] = 'thinkphp';
$map['status'] = 1;
// 把查询条件传入查询方法
$User->where($map)->select();

式クエリです。

上記のクエリ条件は単純な等価性の判定にすぎません。クエリ式を使用すると、より多くの SQL クエリ構文をサポートできます。それぞれの意味は次のとおりです:

式の意味

EQは(=)に等しい

NEQは等しくない(a8093152e673feb7aba1828c43532094)

GTはより大きい(>)

EGTは以上であるto (>= )

LT 未満 (<)

ELT 以下 (<=)

LIKE ファジークエリ

[NOT] BETWEEN (not) 間隔クエリ

[NOT] IN (not)IN クエリEXP 式クエリ、SQL 構文をサポートします例は次のとおりです:

EQ: (=) に等しい


例:


SELECT * FROM think_user WHERE `name`=&#39;thinkphp&#39; AND status=1



は次のクエリと同等です

$map[&#39;字段1&#39;] = array(&#39;表达式&#39;,&#39;查询条件1&#39;);
$map[&#39;字段2&#39;] = array(&#39;表达式&#39;,&#39;查询条件2&#39;);
$Model->where($map)->select(); // 也支持

表現されるクエリ条件は id = 100

NEQ: No Equal to (a8093152e673feb7aba1828c43532094)

例:

$map[&#39;id&#39;] = array(&#39;eq&#39;,100);

はクエリ条件が id 100 であることを表します a8093152e673feb7aba1828c43532094

GT: より大きい>)

例:

$map[&#39;id&#39;] = 100;

クエリ条件は id > 100 を表します

EGT: (>=) 以上

例:

$map[&#39;id&#39;] = array(&#39;neq&#39;,100);

クエリ条件が ID >= 100 であることを表します

LT: (25e997cd72ad53b31e74da5a8972301btrue必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp' ,查询字段支持更多的,例如:

$map[&#39;status&score&title&#39;] =array(&#39;1&#39;,array(&#39;gt&#39;,&#39;0&#39;),&#39;thinkphp&#39;,&#39;_multi&#39;=>true);

查询条件就变成 status= 1 AND score >0 AND title = 'thinkphp'

注意:快捷查询方式中“|”和“&”不能同时使用。

区间查询

where方法支持对某个字段的区间查询,例如:

$map['id'] = array(array('gt',1),array('lt',10)) ;

得到的查询条件是: (`id` > 1) AND (`id` e61ff67c3a56450dd077c5c30f5f7ea1 3) OR (`id` 7eb01ffce09af3315351e8d3de2d76d7 3)
最后一个可以是AND、 OR或者 XOR运算符,如果不写,默认是AND运算。

区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKE、GT和EXP这样的表达式都可以支持。另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:

$map[&#39;name&#39;] = array(array(&#39;like&#39;,&#39;%a%&#39;), array(&#39;like&#39;,&#39;%b%&#39;), array(&#39;like&#39;,&#39;%c%&#39;), &#39;ThinkPHP&#39;,&#39;or&#39;);

最后的查询条件是:

(`name` LIKE &#39;%a%&#39;) OR (`name` LIKE &#39;%b%&#39;) OR (`name` LIKE &#39;%c%&#39;) OR (`name` = &#39;ThinkPHP&#39;)

组合查询

组合查询用于复杂的查询条件,如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话,可以考虑使用组合查询。

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。

一、字符串模式查询(采用_string 作为查询条件)

数组条件还可以和字符串条件混合使用,例如:

$User = M("User"); // 实例化User对象
$map[&#39;id&#39;] = array(&#39;neq&#39;,1);
$map[&#39;name&#39;] = &#39;ok&#39;;
$map[&#39;_string&#39;] = &#39;status=1 AND score>10&#39;;
$User->where($map)->select();

最后得到的查询条件就成了:

( `id` != 1 ) AND ( `name` = &#39;ok&#39; ) AND ( status=1 AND score>10 )

二、请求字符串查询方式

请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。

$map[&#39;id&#39;] = array(&#39;gt&#39;,&#39;100&#39;);
$map[&#39;_query&#39;] = &#39;status=1&score=100&_logic=or&#39;;

得到的查询条件是:`id`>100 AND (`status` = '1' OR `score` = '100')

三、复合查询

复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。
例如:

$where[&#39;name&#39;] = array(&#39;like&#39;, &#39;%thinkphp%&#39;);
$where[&#39;title&#39;] = array(&#39;like&#39;,&#39;%thinkphp%&#39;);
$where[&#39;_logic&#39;] = &#39;or&#39;;
$map[&#39;_complex&#39;] = $where;
$map[&#39;id&#39;] = array(&#39;gt&#39;,1);

查询条件是

( id > 1) AND ( ( name like &#39;%thinkphp%&#39;) OR ( title like &#39;%thinkphp%&#39;) )

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。

很多查询方式可以相互转换,例如上面的查询条件可以改成:

$where[&#39;id&#39;] = array(&#39;gt&#39;,1);
$where[&#39;_string&#39;] = &#39; (name like "%thinkphp%") OR ( title like "%thinkphp") &#39;;

最后生成的SQL语句是一致的。

多次调用

3.1.3版本开始,where方法支持多次调用,但字符串条件只能出现一次,例如:

$map[&#39;a&#39;] = array(&#39;gt&#39;,1);
$where[&#39;b&#39;] = 1;
$Model->where($map)->where($where)->where(&#39;status=1&#39;)->select();

多次的数组条件表达式会最终合并,但字符串条件则只支持一次。

关于ThinkPHP中where()方法的使用,本文就介绍这么多,希望对您有所帮助,谢谢!

相关推荐:

ThinkPHP中redirect用法分析

以上がThinkPHP での where() の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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