最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Thinkphp使用mongodb數(shù)據(jù)庫實現(xiàn)多條件查詢方法

 更新時間:2014年06月26日 10:28:35   投稿:junjie  
這篇文章主要介紹了Thinkphp使用mongodb數(shù)據(jù)庫實現(xiàn)多條件查詢方法,修改了mongodb驅動文件來實現(xiàn)復合查詢、多條件查詢,需要的朋友可以參考下

有個項目用了mongodb數(shù)據(jù)庫,查詢條件有and也有or,按Thinkphp官方手冊,使用復合查詢(_complex),getLastSql輸出查詢語句,發(fā)現(xiàn)查詢條件是空的.用字符串模式查詢(_string),請求字符串查詢(_query)無法滿足需求.估計用mongodb的用戶不多,thinkphp官方對這方面支持也不夠.打開thinkphp的mongodb驅動,Thinkphp/Extend/Driver/Db/DbMongo.class.php,找到protected function parseThinkWhere($key,$val)方法,可以發(fā)現(xiàn),switch里沒有_complex,也就是說,Thinkphp使用mongodb時,根本不支持復合查詢.加上:

復制代碼 代碼如下:

case '_complex'://復合查詢
             $arr   = array();
             foreach ($val as $nkey=>$nval){
              if( strpos($nkey,'_')!=0)
              {
               $parseArr=$this->parseWhereItem($nkey,$nval);
               //轉換成對象
               $obj=new stdClass();
               foreach ($parseArr as $pkey=>$pval)
               {
                $obj->$pkey=$pval;
               }
               array_push($arr, $obj);
              }
             }
             if(isset($val['_logic']) && strtolower($val['_logic']) == 'or' ) {
              unset($val['_logic']);
              $query['$or']   =  $arr;
             }
             break;

這里之所以要轉換成對象,是因為使用thinkphp使用json_encode函數(shù)生成查詢語句,但是如果數(shù)組元素帶key,json_encode函數(shù)會把數(shù)組轉換成對象的形式,mongodb不能識別.因為目前只用到or,所以,代碼只對or作了處理.
另外,發(fā)現(xiàn)個BUG(不知道算不算),在parseWhere方法中:

復制代碼 代碼如下:

foreach ($where as $key=>$val){
            if('_id' != $key && 0===strpos($key,'_')) {
                // 解析特殊條件表達式
                //原 $query=$this->parseThinkWhere($key,$val);
                $query   = array_merge($query,$this->parseThinkWhere($key,$val));
            }else{
                // 查詢字段的安全過濾
                if(!preg_match('/^[A-Z_\|\&\-.a-z0-9]+$/',trim($key))){
                    throw_exception(L('_ERROR_QUERY_').':'.$key);
                }
                $key = trim($key);
                if(strpos($key,'|')) {
                    $array   =  explode('|',$key);
                    $str   = array();
                    foreach ($array as $k){
                        $str[]   = $this->parseWhereItem($k,$val);
                    }
                    $query['$or'] =    $str;
                }elseif(strpos($key,'&')){
                    $array   =  explode('&',$key);
                    $str   = array();
                    foreach ($array as $k){
                        $str[]   = $this->parseWhereItem($k,$val);
                    }
                    $query   = array_merge($query,$str);
                }else{
                    $str   = $this->parseWhereItem($key,$val);
                    $query   = array_merge($query,$str);
                }
            }
        }

解析特殊條件表達式時,源代碼里是$query=$this->parseThinkWhere($key,$val);當特殊表達式在where數(shù)組里不是第一個元素時,就出錯了,else里的代碼得到的$query數(shù)組,都沒了.

相關文章

  • 記Laravel調(diào)用Gin接口調(diào)用formData上傳文件的實現(xiàn)方法

    記Laravel調(diào)用Gin接口調(diào)用formData上傳文件的實現(xiàn)方法

    這篇文章主要介紹了記Laravel調(diào)用Gin接口調(diào)用formData上傳文件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • PHPExcel 修改已存在Excel的方法

    PHPExcel 修改已存在Excel的方法

    下面小編就為大家分享一篇PHPExcel 修改已存在Excel的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 支持中文的PHP按字符串長度分割成數(shù)組代碼

    支持中文的PHP按字符串長度分割成數(shù)組代碼

    自己編寫的PHP按字符串長度分割成數(shù)組代碼,支持中文字符,下面給出代碼和使用方法,有需要的小伙伴可以參考下。
    2015-05-05
  • 基于MySQL分區(qū)性能的詳細介紹

    基于MySQL分區(qū)性能的詳細介紹

    本篇文章介紹了,對MySQL分區(qū)性能的詳細說明,需要的朋友參考下
    2013-05-05
  • thinkphp實現(xiàn)like模糊查詢實例

    thinkphp實現(xiàn)like模糊查詢實例

    這篇文章主要介紹了thinkphp實現(xiàn)like模糊查詢,以實例形式講述了字符串形式及數(shù)組形式作為查詢條件的like模糊查詢實現(xiàn)方法,是非常具有實用價值的技巧,需要的朋友可以參考下
    2014-10-10
  • PHP超全局數(shù)組(Superglobals)介紹

    PHP超全局數(shù)組(Superglobals)介紹

    這篇文章主要介紹了PHP超全局數(shù)組(Superglobals)介紹,本文講解了概述、變量的作用域、超全局數(shù)組及注意事項等內(nèi)容,需要的朋友可以參考下
    2015-07-07
  • CakePHP的安裝的簡單方法

    CakePHP的安裝的簡單方法

    在本篇文章里小編給大家整理的是一篇關于CakePHP的安裝的簡單方法,對此有興趣的朋友們可以參考學習下。
    2021-01-01
  • php操作mysqli(示例代碼)

    php操作mysqli(示例代碼)

    php操作mysqli的示例代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • destoon實現(xiàn)調(diào)用熱門關鍵字的方法

    destoon實現(xiàn)調(diào)用熱門關鍵字的方法

    這篇文章主要介紹了destoon實現(xiàn)調(diào)用熱門關鍵字的方法,對于進行模板開發(fā)來說非常有用,需要的朋友可以參考下
    2014-07-07
  • PHP用Session實現(xiàn)用戶登陸功能

    PHP用Session實現(xiàn)用戶登陸功能

    Session 是存儲在服務器端的會話,相對安全,并且不像 Cookie 那樣有存儲長度限制。由于 Session 是以文本文件形式存儲在服務器端的,所以不怕遠程用戶修改 Session 內(nèi)容。這篇文章主要介紹了PHP用Session實現(xiàn)用戶登陸功能,需要的朋友可以參考下
    2022-12-12

最新評論

醴陵市| 铜梁县| 平顺县| 花莲县| 尼勒克县| 宁武县| 临夏县| 滨海县| 赣榆县| 荔波县| 民丰县| 临江市| 桂阳县| 息烽县| 佛坪县| 曲松县| 富蕴县| 辽中县| 西乌珠穆沁旗| 松原市| 依兰县| 望江县| 湘潭县| 南平市| 桃江县| 扶余县| 和林格尔县| 巴东县| 宿松县| 武安市| 汉源县| 兴山县| 厦门市| 迁安市| 乐昌市| 肇源县| 思茅市| 陈巴尔虎旗| 绥宁县| 汾阳市| 洪泽县|