この記事では主に 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は等しくない()GTはより大きい(>)
EGTは以上であるto (>= )LT 未満 (ELT 以下 (LIKE ファジークエリ
[NOT] BETWEEN (not) 間隔クエリ[NOT] IN (not)IN クエリEXP 式クエリ、SQL 構文をサポートします例は次のとおりです:
EQ: (=) に等しい
例:
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
は次のクエリと同等です
$map['字段1'] = array('表达式','查询条件1'); $map['字段2'] = array('表达式','查询条件2'); $Model->where($map)->select(); // 也支持
表現されるクエリ条件は id = 100
NEQ: No Equal to ()
例:
$map['id'] = array('eq',100);
はクエリ条件が id 100 であることを表します
GT: より大きい>)
例:
$map['id'] = 100;
クエリ条件は id > 100 を表します
EGT: (>=) 以上
例:
$map['id'] = array('neq',100);
クエリ条件が ID >= 100 であることを表します
LT: (
例:
$map['id'] = array('gt',100);
表現されるクエリ条件は ID
ELT: 以下です(
例:
$map['id'] = array('egt',100);
表されるクエリ条件は id
[NOT] LIKE: SQL と同じ LIKE
例:
$map['id'] = array('lt',100);
クエリ条件は「thinkphp%」のような名前になります
DB_LIKE_FIELDS パラメータが設定されている場合、一部のフィールドもファジークエリとして自動的に処理されます。たとえば、
$map['id'] = array('elt',100);
が設定されている場合、
$map['name'] = array('like','thinkphp%');
を使用したクエリ条件は、「%thinkphp%」のような名前になります
'DB_LIKE_FIELDS'=>'title|content'
によって生成されたクエリなどの配列モードをサポートします
条件は次のとおりです:
$map['title'] = 'thinkphp';
[NOT] BETWEEN: SQL の [not] between と同じで、クエリ条件は文字列または配列をサポートします。たとえば、:
$map['a'] =array('like',array('%thinkphp%','%tp'),'OR'); $map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND');は次と同等です。
(a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')クエリ条件は ID BETWEEN 1 AND 8 になります[NOT] IN: SQL の [not] in と同じで、クエリ条件は文字列または配列をサポートします。例:
$map['id'] = array('between','1,8');は以下と同等です:
$map['id'] = array('between',array('1','8'));クエリ条件はID NOT IN (1,5, 8)になりますEXP: 式、より複雑なクエリ状況をサポートします例:
$map['id'] = array('in','1,3,8');
可以改成:
$map['id'] = array('exp',' IN (1,3,8) ');
exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。
查询表达式不仅可用于查询条件,也可以用于数据更新,例如:
$User = M("User"); // 实例化User对象 // 要修改的数据对象属性赋值 $data['name'] = 'ThinkPHP'; $data['score'] = array('exp','score+1');// 用户的积分加1 $User->where('id=5')->save($data); // 根据条件保存修改的数据
快捷查询
where方法支持快捷查询方式,可以进一步简化查询条件的写法,例如:
一、实现不同字段相同的查询条件
$User = M("User"); // 实例化User对象 $map['name|title'] = 'thinkphp'; // 把查询条件传入查询方法 $User->where($map)->select();
查询条件就变成 name= 'thinkphp' OR title = 'thinkphp'
二、实现不同字段不同的查询条件
$User = M("User"); // 实例化User对象 $map['status&title'] =array('1','thinkphp','_multi'=>true); // 把查询条件传入查询方法 $User->where($map)->select();
'_multi'=>true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp' ,查询字段支持更多的,例如:
$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);
查询条件就变成 status= 1 AND score >0 AND title = 'thinkphp'
注意:快捷查询方式中“|”和“&”不能同时使用。
区间查询
where方法支持对某个字段的区间查询,例如:
$map['id'] = array(array('gt',1),array('lt',10)) ;
得到的查询条件是: (`id` > 1) AND (`id`
$map['id'] = array(array('gt',3),array('lt',10), 'or') ;
得到的查询条件是: (`id` > 3) OR (`id`
$map['id'] = array(array('neq',6),array('gt',3),'and');
得到的查询条件是:(`id` != 6) AND (`id` > 3)
最后一个可以是AND、 OR或者 XOR运算符,如果不写,默认是AND运算。
区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKE、GT和EXP这样的表达式都可以支持。另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:
$map['name'] = array(array('like','%a%'), array('like','%b%'), array('like','%c%'), 'ThinkPHP','or');
最后的查询条件是:
(`name` LIKE '%a%') OR (`name` LIKE '%b%') OR (`name` LIKE '%c%') OR (`name` = 'ThinkPHP')
组合查询
组合查询用于复杂的查询条件,如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话,可以考虑使用组合查询。
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。
一、字符串模式查询(采用_string 作为查询条件)
数组条件还可以和字符串条件混合使用,例如:
$User = M("User"); // 实例化User对象 $map['id'] = array('neq',1); $map['name'] = 'ok'; $map['_string'] = 'status=1 AND score>10'; $User->where($map)->select();
最后得到的查询条件就成了:
( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )
二、请求字符串查询方式
请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。
$map['id'] = array('gt','100'); $map['_query'] = 'status=1&score=100&_logic=or';
得到的查询条件是:`id`>100 AND (`status` = '1' OR `score` = '100')
三、复合查询
复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。
例如:
$where['name'] = array('like', '%thinkphp%'); $where['title'] = array('like','%thinkphp%'); $where['_logic'] = 'or'; $map['_complex'] = $where; $map['id'] = array('gt',1);
查询条件是
( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )
复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。
很多查询方式可以相互转换,例如上面的查询条件可以改成:
$where['id'] = array('gt',1); $where['_string'] = ' (name like "%thinkphp%") OR ( title like "%thinkphp") ';
最后生成的SQL语句是一致的。
多次调用
3.1.3版本开始,where方法支持多次调用,但字符串条件只能出现一次,例如:
$map['a'] = array('gt',1); $where['b'] = 1; $Model->where($map)->where($where)->where('status=1')->select();
多次的数组条件表达式会最终合并,但字符串条件则只支持一次。
关于ThinkPHP中where()方法的使用,本文就介绍这么多,希望对您有所帮助,谢谢!
相关推荐:
以上がThinkPHP での where() の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPでは、session_status()またはsession_id()を使用して、セッションが開始されたかどうかを確認できます。 1)session_status()関数を使用します。 php_session_activeが返された場合、セッションが開始されました。 2)SESSION_ID()関数を使用します。空の文字列が返された場合、セッションが開始されます。どちらの方法でもセッション状態を効果的に確認でき、使用する方法を選択することは、PHPバージョンと個人的な好みに依存します。

Sessionsionsionsarevitalinwebapplications、特にコマースプラットフォームの前。

PHPでの同時セッションアクセスの管理は、次の方法で実行できます。1。データベースを使用してセッションデータを保存します。これらの方法は、データの一貫性を確保し、並行性のパフォーマンスを向上させるのに役立ちます。

phpsessionshaveverallimitations:1)storagecconstraintscanleadtoperformanceissues; 2)securityvulnerablesliasitylikessessionfixationAttacksicexist;

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









