Maison >développement back-end >tutoriel php >Explication détaillée de la façon d'utiliserwhere() dans ThinkPHP

Explication détaillée de la façon d'utiliserwhere() dans ThinkPHP

不言
不言original
2018-06-06 14:36:382545parcourir

Cet article présente principalement l'explication détaillée de l'utilisation de Where() dans ThinkPHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

La méthode Where peut. être utilisé pour base de données Filtrer les résultats de l’opération. C'est-à-dire la clause Where dans l'instruction de requête SQL. Cet article vous présente l'explication détaillée de l'utilisation de la méthode Where() dans ThinkPHP. Les amis intéressés peuvent se référer à

Cet article présente l'utilisation de la méthode Where() dans ThinkPHP. La méthode Where peut être utilisée pour filtrer les résultats des opérations de base de données. C'est-à-dire la clause Where dans l'instruction de requête SQL.

Aujourd'hui, je vais vous parler de la méthode Where, qui est la requête la plus couramment utilisée mais aussi la plus complexe. La méthode Where est également l'une des méthodes de fonctionnement cohérentes de la classe modèle et est principalement utilisée pour les requêtes. et réglage des conditions de fonctionnement.

L'utilisation de la méthode Where est l'essence du langage de requête ThinkPHP et une partie importante et un point fort de l'ORM ThinkPHP. Elle peut compléter des requêtes, notamment des requêtes ordinaires, des requêtes d'expression, des requêtes rapides, des requêtes à intervalles et des requêtes combinées. les requêtes fonctionnent. Les paramètres de la méthode Where prennent en charge les chaînes et les tableaux. Bien que les objets puissent également être utilisés, cela n'est pas recommandé.

Conditions de chaîne

Utilisez des conditions de chaîne pour interroger et opérer directement, par exemple :

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

L'instruction SQL finale générée est

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

Si vous utilisez la version 3.1 ou supérieure, lorsque vous utilisez des conditions de chaîne, elle il est recommandé de coopérer avec le mécanisme de prétraitement pour assurer une plus grande sécurité, comme :

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

ou d'utiliser :

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

Si la variable $id provient de la soumission de l'utilisateur ou de l'adresse URL, si l'entrée est de type non numérique, elle sera forcée d'être formatée dans un format numérique avant l'interrogation.
Le type de format de prétraitement de chaîne prend en charge la spécification de nombres, de chaînes, etc. Pour plus de détails, veuillez vous référer à la description des paramètres de la méthode vsprintf.

Condition du tableau

L'utilisation de la condition du tableau est celle recommandée par ThinkPHP.

Requête normale

La méthode de requête de tableau la plus simple est la suivante :

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

L'instruction SQL finale générée est

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

Requête d'expression

La condition de requête ci-dessus n'est qu'un simple jugement d'égalité. Vous pouvez utiliser des expressions de requête pour prendre en charge davantage de syntaxe de requête SQL :

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

Les expressions ne sont pas sensibles à la casse. Les expressions de requête suivantes sont prises en charge et leurs significations respectives sont :

Signification de l'expression

EQ est égal à (=)

NEQ n'est pas égal à (a8093152e673feb7aba1828c43532094)
GT est supérieur à (>)
EGT est supérieur ou égal à (>=)
LT est inférieur à (< ;)
ELT inférieur ou égal à (<=)
LIKE requête floue
[NOT] ENTRE (pas dans) requête d'intervalle
[NOT] IN (pas in) Requête IN
Requête d'expression EXP, prend en charge la syntaxe SQL

Les exemples sont les suivants :

EQ : égal à (=)

Par exemple :

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

est équivalent à la requête suivante

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

La condition de requête représentée par.

est id = 100

NEQ : Différent de ( a8093152e673feb7aba1828c43532094)

Par exemple :

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

représente l'identifiant de la condition de requête a8093152e673feb7aba1828c43532094 100

GT : supérieur à (>)

Par exemple :

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

représente l'identifiant de la condition de requête > 100

EGT : Supérieur ou égal à (>=)

Par exemple :

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

représente l'identifiant de la condition de requête >= 100

LT : inférieur à (587ecea6372b5b738947db4c973cb784true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 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用法分析

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn