From 5d55579fd424e024c52e62265b72e24c38a45004 Mon Sep 17 00:00:00 2001
From: chengkun <chengkun@ishangstudy.com>
Date: Thu, 24 Apr 2025 11:08:36 +0800
Subject: [PATCH] 提交

---
 app/public/action.class.php | 2287 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 1,156 insertions(+), 1,131 deletions(-)

diff --git a/app/public/action.class.php b/app/public/action.class.php
index 6e65815..9d2533c 100644
--- a/app/public/action.class.php
+++ b/app/public/action.class.php
@@ -1,4 +1,5 @@
 <?php
+
 /*
 * $Author :PHPYUN开发团队
 *
@@ -8,111 +9,111 @@
 *
 * 软件声明:未经授权前提下,不得用于商业运营、二次开发以及任何形式的再次发布。
  */
-class model{
+
+class model {
     // 操作状态
-    const MODEL_INSERT          =   1;      //  插入模型数据
-    const MODEL_UPDATE          =   2;      //  更新模型数据
-    const MODEL_BOTH            =   3;      //  包含上面两种方式
-    const MUST_VALIDATE         =   1;      // 必须验证
-    const EXISTS_VALIDATE       =   0;      // 表单存在字段则验证
-    const VALUE_VALIDATE        =   2;      // 表单值不为空则验证
-
+    const MODEL_INSERT = 1;      //  插入模型数据
+    const MODEL_UPDATE = 2;      //  更新模型数据
+    const MODEL_BOTH = 3;      //  包含上面两种方式
+    const MUST_VALIDATE = 1;      // 必须验证
+    const EXISTS_VALIDATE = 0;      // 表单存在字段则验证
+    const VALUE_VALIDATE = 2;      // 表单值不为空则验证
+    
     //网站配置信息
-    protected $config           =   null;
+    protected $config = NULL;
     // 当前数据库操作对象
-    protected $db               =   null;
+    protected $db = NULL;
     // 主键名称
-    protected $pk               =   'id';
+    protected $pk = 'id';
     // 主键是否自动增长
-    protected $autoinc          =   false;
+    protected $autoinc = FALSE;
     // 数据表前缀
-    protected $def              =   null;
+    protected $def = NULL;
     // 模型名称
-    protected $name             =   '';
+    protected $name = '';
     // 数据库编码
-    protected $coding           =   '';
+    protected $coding = '';
     // 数据库名称
     // 数据库名称
-    protected $dbName           =   '';
+    protected $dbName = '';
     //数据库配置
-    protected $connection       =   '';
+    protected $connection = '';
     // 数据表名(不包含表前缀)
-    protected $tableName        =   '';
+    protected $tableName = '';
     // 实际数据表名(包含表前缀)
-    protected $trueTableName    =   '';
+    protected $trueTableName = '';
     // 最近错误信息
-    protected $error            =   '';
+    protected $error = '';
     // 字段信息
-    protected $fields           =   array();
+    protected $fields = array();
     // 数据信息
-    protected $data             =   array();
+    protected $data = array();
     // 查询表达式参数
-    protected $options          =   array();
-    protected $_validate        =   array();  // 自动验证定义
-    protected $_auto            =   array();  // 自动完成定义
-    protected $_map             =   array();  // 字段映射定义
-    protected $_scope           =   array();  // 命名范围定义
+    protected $options = array();
+    protected $_validate = array();  // 自动验证定义
+    protected $_auto = array();  // 自动完成定义
+    protected $_map = array();  // 字段映射定义
+    protected $_scope = array();  // 命名范围定义
     // 是否自动检测数据表字段信息
-    protected $autoCheckFields  =   true;
+    protected $autoCheckFields = TRUE;
     // 是否批处理验证
-    protected $patchValidate    =   false;
+    protected $patchValidate = FALSE;
     // 链操作方法列表
-    protected $methods          =   array('order','alias','having','group','lock','distinct','auto','filter','validate','result','token');
+    protected $methods = array('order', 'alias', 'having', 'group', 'lock', 'distinct', 'auto', 'filter', 'validate', 'result', 'token');
     //开启分站功能的数据表
-    protected $sitetable        =   array('ad_order','admin_announcement','zhaopinhui','zhaopinhui_com','zhaopinhui_pic','news_base','news_content','resume_expect','member','company_job','resume','user_entrust','user_entrust_record','down_resume','look_resume','company','company_cert','company_msg','company_news','company_order','company_pay','company_product','once_job','resume_tiny','userid_msg','userid_job','look_job','admin_link','px_subject','px_train_news','px_teacher','lt_info','lt_job','report','invoice_record','company_statis','px_train','partjob','hotjob','px_baoming','px_zixun','company_show','resume_show','banner','px_banner','px_train_show','rebates','lt_talent','member_log','login_log','user_change','company_account');
-
-	//此数组针对insert_into方法。目的是添加附表数据的时候,不加入当前站的did,而是存member表中的did。
-   // protected $sitetadd=array('ad','admin_announcement','zhaopinhui','news_content','member','resume','company','once_job','px_train','resume_tiny','admin_link','lt_info','partjob','hotjob');
-
-	protected $admindir;
-	protected $siteadmindir;
-
-	protected $logininfo;
-
-	public function __construct($db,$def,$logininfo = array(),$tpl=''){
-		global $coding,$config,$adminDir,$siteAdminDir;
-
-		$this->db = $db;
-		$this->tp = '';//未查到在哪用到
-		$this->def = $def;
-		$this->md = $coding;
+    protected $sitetable = array('ad_order', 'admin_announcement', 'zhaopinhui', 'zhaopinhui_com', 'zhaopinhui_pic', 'news_base', 'news_content', 'resume_expect', 'member', 'company_job', 'resume', 'user_entrust', 'user_entrust_record', 'down_resume', 'look_resume', 'company', 'company_cert', 'company_msg', 'company_news', 'company_order', 'company_pay', 'company_product', 'once_job', 'resume_tiny', 'userid_msg', 'userid_job', 'look_job', 'admin_link', 'px_subject', 'px_train_news', 'px_teacher', 'lt_info', 'lt_job', 'report', 'invoice_record', 'company_statis', 'px_train', 'partjob', 'hotjob', 'px_baoming', 'px_zixun', 'company_show', 'resume_show', 'banner', 'px_banner', 'px_train_show', 'rebates', 'lt_talent', 'member_log', 'login_log', 'user_change', 'company_account');
+    
+    //此数组针对insert_into方法。目的是添加附表数据的时候,不加入当前站的did,而是存member表中的did。
+    // protected $sitetadd=array('ad','admin_announcement','zhaopinhui','news_content','member','resume','company','once_job','px_train','resume_tiny','admin_link','lt_info','partjob','hotjob');
+    
+    protected $admindir;
+    protected $siteadmindir;
+    
+    protected $logininfo;
+    
+    public function __construct($db, $def, $logininfo = array(), $tpl = '') {
+        global $coding, $config, $adminDir, $siteAdminDir;
+        
+        $this->db = $db;
+        $this->tp = '';//未查到在哪用到
+        $this->def = $def;
+        $this->md = $coding;
         $this->config = $config;
-        if (!empty($logininfo)){
+        if (!empty($logininfo)) {
             $this->uid = $logininfo['uid'];
             $this->username = $logininfo['username'];
             $this->usertype = $logininfo['usertype'];
         }
-		$this->admindir = $adminDir;
-		$this->siteadmindir = $siteAdminDir;
-		$this->tpl = $tpl;
-		
-		if(!($this->config['sy_wapdomain'])){
-			
-			$this->config['sy_wapdomain'] = $this->config['sy_weburl'].'/'.$this->config['sy_wapdir'];
-		}else{
-			
-			if($config['sy_wapssl']=='1'){
-				$protocol = 'https://';
-			}else{
-				$protocol = 'http://';
-			}
-
-			if(strpos($this->config['sy_wapdomain'],'http://')===false && strpos($this->config['sy_wapdomain'],'https://')===false)
-			{
-				$this->config['sy_wapdomain'] = $protocol.$this->config['sy_wapdomain'];
-			}
-		}
-		if($adminDir||!$siteAdminDir){
-			//$this->sitetadd = array();
-			$this->sitetable = array();
-		}
-		// oss关闭时,oss地址为服务器地址
-		if (!isset($this->config['sy_oss']) || (isset($this->config['sy_oss']) && $this->config['sy_oss'] == 2)){
-		    
-		    $this->config['sy_ossurl'] = $this->config['sy_weburl'];
-		}
-	}
-
+        $this->admindir = $adminDir;
+        $this->siteadmindir = $siteAdminDir;
+        $this->tpl = $tpl;
+        
+        if (!($this->config['sy_wapdomain'])) {
+            
+            $this->config['sy_wapdomain'] = $this->config['sy_weburl'] . '/' . $this->config['sy_wapdir'];
+        } else {
+            
+            if ($config['sy_wapssl'] == '1') {
+                $protocol = 'https://';
+            } else {
+                $protocol = 'http://';
+            }
+            
+            if (strpos($this->config['sy_wapdomain'], 'http://') === FALSE && strpos($this->config['sy_wapdomain'], 'https://') === FALSE) {
+                $this->config['sy_wapdomain'] = $protocol . $this->config['sy_wapdomain'];
+            }
+        }
+        if ($adminDir || !$siteAdminDir) {
+            //$this->sitetadd = array();
+            $this->sitetable = array();
+        }
+        // oss关闭时,oss地址为服务器地址
+        if (!isset($this->config['sy_oss']) || (isset($this->config['sy_oss']) && $this->config['sy_oss'] == 2)) {
+            
+            $this->config['sy_ossurl'] = $this->config['sy_weburl'];
+        }
+    }
+    
     /**
      * 设置数据对象的值
      * @access public
@@ -120,11 +121,11 @@
      * @param mixed $value 值
      * @return void
      */
-    public function __set($name,$value) {
+    public function __set($name, $value) {
         // 设置数据对象属性
-        $this->data[$name]  =   $value;
+        $this->data[$name] = $value;
     }
-
+    
     /**
      * 获取数据对象的值
      * @access public
@@ -132,9 +133,9 @@
      * @return mixed
      */
     public function __get($name) {
-        return isset($this->data[$name])?$this->data[$name]:null;
+        return isset($this->data[$name]) ? $this->data[$name] : NULL;
     }
-
+    
     /**
      * 检测数据对象的值
      * @access public
@@ -144,7 +145,7 @@
     public function __isset($name) {
         return isset($this->data[$name]);
     }
-
+    
     /**
      * 销毁数据对象的值
      * @access public
@@ -154,403 +155,419 @@
     public function __unset($name) {
         unset($this->data[$name]);
     }
-
+    
     // 回调方法 初始化模型
-    protected function _initialize() {}
-
- 
-
-    function insert_into($table,$data=array()){
-
-		
-		$value=array();
-      
-		$this->db->connect();
-        include(PLUS_PATH.'dbstruct.cache.php');
-        $TableFullName=$this->def.$table;
-        if(is_array($$TableFullName)){
-            $fields=array_keys($$TableFullName);
-        }else{
-			return false;
-		}
-
-		if(is_array($fields)){
-		
-			if(is_array($data)){
-				foreach($data as $key=>$v){
-					if(in_array($key,$fields)){
-						$v = $this->FilterStr($v);
-						$value[]="`".$key."`='".$this->db->escape_string($v)."'";
-					}
-				}
-			}
-		}
-		$value=@implode(",",$value);
-		return $this->DB_insert_once($table,$value);
-	}
-	function update_once($table,$data=array(),$where=array()){ 
-		
-		$this->db->connect();
-		$value=array();
-		include(PLUS_PATH.'dbstruct.cache.php');
-        $TableFullName=$this->def.$table;
-        if(is_array($$TableFullName)){
-            $fields=array_keys($$TableFullName);
-        }else{
-			return false;
-		}
-		
-		if(is_array($fields)){
-
-			if(is_array($data)){
-			    
-				foreach($data as $key=>$v){
-				 
-					if(in_array($key,$fields)){
-					     
-               
-						if(is_array($v)){
-	    
-						    if($v[0] == '+'){
-						        
-						        $value[]  =  '`'.$key.'` = `'.$key.'` + '.$this->db->escape_string($v[1]);
-                            }elseif ($v[0] == '-'){
-						        
-						        $value[]  =  '`'.$key.'` = `'.$key.'` - '.$this->db->escape_string($v[1]);
-						        
-						    }else if($v[0] == '='){
-						        
-						        $value[]  =  '`'.$key.'`  = '.$this->db->escape_string($v[1]);
-
-						        
-						    }elseif ($v[0] == 'CASE'){
-						        
-						        
-						        $casesql  =  '`'.$key.'` =  CASE `'.$this->db->escape_string($v[1]).'`';
-						        
-						        foreach ($v[2] as $ck=>$cv){
-						            
-						            $casesql  .=  " WHEN '".$ck."' THEN '".$this->db->escape_string($cv)."' ";
-						        }
-						        
-						        $casesql  .=  'END';
-						        
-						        $value[]  =  $casesql;
-						    }elseif ($v[0] == 'DATE_ADD'){
-								
-								$value[]  =  '`'.$key.'` = DATE_ADD(`'.$key.'` , INTERVAL '.$this->db->escape_string($v[1]).' DAY )';
-								
-							}elseif ($v[0] == 'concat'){
-								
-								$value[]  =  '`'.$key.'` = concat(`'.$key.'` , ",'.$this->db->escape_string($v[1]).' ")';
-							}else{
-							    
-							    $this->db->show_error();
-							}
-							
-						}else{
-               
-						    $v = $this->FilterStr($v);
-						    
-						    $value[] = "`".$key."`='".$this->db->escape_string($v)."'";
-						}
-					}  
-				}
-			}
-
-			
-			$whereNew  =  $this->checkWhere($where);
-			
-			$value     =  @implode(',',$value);
-			
-			if($value !='' && $whereNew !=''){
-
-				return $this->DB_update_all($table,$value,$whereNew);
-			}else{
-				return false;
-			}
-		}
-	}
-	
-	function FilterStr($str){
-		$str = stripslashes($str);
-		return $str;
-	}
-    function Memcache_set($name,$value="")
-    {
-
-		global $config;
-
-		if(isset($config['ismemcache']) && $config['ismemcache']==2){
-			return false;
-		}
-		if (!empty($config['memcachehost']) && !empty($config['memcacheport']) && !empty($config['memcachetime'])){
-		    
-		    $memcachehost  =  $config['memcachehost'];//所在服务器
-		    $memcacheport  =  $config['memcacheport'];//所在服务器端口
-		    $memcachezip   =  0;//是否支持解压缩
-		    $memcachetime  =  $config['memcachetime'];//缓存时间
-		    
-		    $name=md5(str_replace(array(" ","`","'",".","=","!"),"",$name));
-		    
-		    if(!extension_loaded('memcache'))return;
-		    
-		    $memcache =new memcache();
-		    
-		    if(!@class_exists($memcache)){return;}
-		    
-		    $memcache->connect($memcachehost,$memcacheport) or die ("Memcache连接失败或您的服务器不支持Memcache,请在后台关闭!");
-		    
-		    $val  =  $memcache->get($name);
-		    
-		    if(!is_array($val)){
-		        $val  =  $value;
-		        $memcache->set($name,$value,$memcachezip,$memcachetime);
-		    }
-		    $memcache->close();
-		    return $val;
-		}else{
-		    return false;
-		}
-	}
-	/**
+    protected function _initialize() {
+    }
+    
+    
+    function insert_into($table, $data = array()) {
+        
+        
+        $value = array();
+        
+        $this->db->connect();
+        include(PLUS_PATH . 'dbstruct.cache.php');
+        $TableFullName = $this->def . $table;
+        if (is_array($$TableFullName)) {
+            $fields = array_keys($$TableFullName);
+        } else {
+            return FALSE;
+        }
+        
+        if (is_array($fields)) {
+            
+            if (is_array($data)) {
+                foreach ($data as $key => $v) {
+                    if (in_array($key, $fields)) {
+                        $v = $this->FilterStr($v);
+                        $value[] = "`" . $key . "`='" . $this->db->escape_string($v) . "'";
+                    }
+                }
+            }
+        }
+        $value = @implode(",", $value);
+        return $this->DB_insert_once($table, $value);
+    }
+    
+    function update_once($table, $data = array(), $where = array()) {
+        
+        $this->db->connect();
+        $value = array();
+        include(PLUS_PATH . 'dbstruct.cache.php');
+//        $TableFullName=$this->def.$table;
+//        var_dump($$TableFullName);exit();
+//        if (is_array($where)) {
+//            $fields = array_keys($where);
+//        } else {
+//            return FALSE;
+//        }
+//        var_dump($fields);exit();
+        
+        
+        if (is_array($data)) {
+            
+            foreach ($data as $key => $v) {
+                
+                if (is_array($v)) {
+                    
+                    if ($v[0] == '+') {
+                        
+                        $value[] = '`' . $key . '` = `' . $key . '` + ' . $this->db->escape_string($v[1]);
+                    } elseif ($v[0] == '-') {
+                        
+                        $value[] = '`' . $key . '` = `' . $key . '` - ' . $this->db->escape_string($v[1]);
+                        
+                    } else if ($v[0] == '=') {
+                        
+                        $value[] = '`' . $key . '`  = ' . $this->db->escape_string($v[1]);
+                        
+                        
+                    } elseif ($v[0] == 'CASE') {
+                        
+                        
+                        $casesql = '`' . $key . '` =  CASE `' . $this->db->escape_string($v[1]) . '`';
+                        
+                        foreach ($v[2] as $ck => $cv) {
+                            
+                            $casesql .= " WHEN '" . $ck . "' THEN '" . $this->db->escape_string($cv) . "' ";
+                        }
+                        
+                        $casesql .= 'END';
+                        
+                        $value[] = $casesql;
+                    } elseif ($v[0] == 'DATE_ADD') {
+                        
+                        $value[] = '`' . $key . '` = DATE_ADD(`' . $key . '` , INTERVAL ' . $this->db->escape_string($v[1]) . ' DAY )';
+                        
+                    } elseif ($v[0] == 'concat') {
+                        
+                        $value[] = '`' . $key . '` = concat(`' . $key . '` , ",' . $this->db->escape_string($v[1]) . ' ")';
+                    } else {
+                        
+                        $this->db->show_error();
+                    }
+                    
+                } else {
+                    
+                    $v = $this->FilterStr($v);
+                    
+                    $value[] = "`" . $key . "`='" . $this->db->escape_string($v) . "'";
+                }
+                
+            }
+        }
+        
+        
+        $whereNew = $this->checkWhere($where);
+        
+        $value = @implode(',', $value);
+        
+        if ($value != '' && $whereNew != '') {
+            
+            return $this->DB_update_all($table, $value, $whereNew);
+        } else {
+            return FALSE;
+        }
+        
+    }
+    
+    function FilterStr($str) {
+        $str = stripslashes($str);
+        return $str;
+    }
+    
+    function Memcache_set($name, $value = "") {
+        
+        global $config;
+        
+        if (isset($config['ismemcache']) && $config['ismemcache'] == 2) {
+            return FALSE;
+        }
+        if (!empty($config['memcachehost']) && !empty($config['memcacheport']) && !empty($config['memcachetime'])) {
+            
+            $memcachehost = $config['memcachehost'];//所在服务器
+            $memcacheport = $config['memcacheport'];//所在服务器端口
+            $memcachezip = 0;//是否支持解压缩
+            $memcachetime = $config['memcachetime'];//缓存时间
+            
+            $name = md5(str_replace(array(" ", "`", "'", ".", "=", "!"), "", $name));
+            
+            if (!extension_loaded('memcache')) return;
+            
+            $memcache = new memcache();
+            
+            if (!@class_exists($memcache)) {
+                return;
+            }
+            
+            $memcache->connect($memcachehost, $memcacheport) or die ("Memcache连接失败或您的服务器不支持Memcache,请在后台关闭!");
+            
+            $val = $memcache->get($name);
+            
+            if (!is_array($val)) {
+                $val = $value;
+                $memcache->set($name, $value, $memcachezip, $memcachetime);
+            }
+            $memcache->close();
+            return $val;
+        } else {
+            return FALSE;
+        }
+    }
+    
+    /**
      * 通用数量查询$tablename,$where = 1, $select="*"
      */
-	function DB_select_num($tablename, $where = '', $select = "*",$tablename2='',$special=''){
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		$cachename=$tablename.$where;
-		if(!$return=$this->Memcache_set($cachename)){//获取是否存在memcache
-			if($tablename2){
-				if($this->siteadmindir && $special==''){
-				   if(in_array($tablename,$this->sitetable) && is_numeric($this->config['did'])){
-					  $Where='a.`did`='.$this->config['did']."' and ".$Where;
-				   }
-				   if(in_array($tablename2,$this->sitetable) && is_numeric($this->config['did'])){
-					  $Where='b.`did`='.$this->config['did']."' and ".$Where;
-				   }
-				}
-
-				$SQL = "SELECT count($select) as num FROM " . $this->def . $tablename . " as a," . $this->def . $tablename2 . " as b  WHERE $where";
-			}else{
-
-
-				if($this->siteadmindir && $special==''){
-
-					$where = $this->site_fetchsql($where,$tablename);
-				}
-				$SQL = "SELECT count($select) as num FROM " . $this->def . $tablename;
-
-				if($where)
-				{
-					$SQL	.=	" WHERE ".$where;
-				}
-			}
-			$query = $this->db->query($SQL);
-			while($row=$this->db->fetch_array($query)){$return=$row['num'];}
-			$this->Memcache_set($cachename,$return);//设置memcache
-		}
-		if($return<1){$return='0';}
-		return $return;
-	}
-
-	function select_num($tablename, $where = array(), $select = "*"){
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		if($this->siteadmindir){
-		    if(in_array($tablename,$this->sitetable)){
-		        if(is_numeric($this->config['did'])){
-		            $where['did']=$this->config['did'];
-		        }
-		    }
-		}
-		$whereNew  =  $this->checkWhere($where);
-		$cachename =  $tablename.$whereNew;
-		
-		if(!$return=$this->Memcache_set($cachename)){//获取是否存在memcache
-		    
-		    $SQL = "SELECT count($select) as num FROM " . $this->def . $tablename . $whereNew;
-			 
-			$query = $this->db->query($SQL);
-			while($row=$this->db->fetch_array($query)){$return=$row['num'];}
-			$this->Memcache_set($cachename,$return);//设置memcache
-		}
-		if($return<1){$return='0';}
-		return $return;
-	}
-	/**
-     * 通用query查询 $tablename,$where = 1, $select="*"
-	 *$special:标记某些特殊查询,不使用did参数。
-	 *2016-1-14		LGL
-     */
-	function DB_select_query($tablename, $where = 1, $select = "*",$special='') {
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		if($this->siteadmindir){
-
-			$where = $this->site_fetchsql($where,$tablename);
-		}
-	    $SQL = "SELECT $select FROM " . $this->def . $tablename . " WHERE $where";
-		$query=$this->db->query($SQL);
-		return $query;
-	}
-	/**
-     * 通用all查询 $tablename,$where = 1, $select="*"
-	 *$special:标记某些特殊查询,不使用did参数。
-     */
-	function DB_select_all($tablename, $where = 1, $select = "*",$special='') {
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-
-		$cachename=$tablename.$where;
-		if(!$row_return=$this->Memcache_set($cachename)){//获取是否存在memcache
-			$row_return=array();  
-			if($this->siteadmindir&&$special==''){
-
-					$where = $this->site_fetchsql($where,$tablename);
-			}  
-			$SQL = "SELECT $select FROM `" . $this->def . $tablename . "`";
-			
-			if( $where ){
-				$SQL .= " WHERE ".$where;
-			}
-
-			$query=$this->db->query($SQL);
-            while($row=$this->db->fetch_array($query)){$row_return[]=$row;}
-            $this->Memcache_set($cachename,$row_return);//设置memcache
-		}
-        return $row_return;
-	}
-
-	//新多条查询 
-	function select_all($tablename, $where = array(), $select = "*",$special='') {
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-       
-		if($this->siteadmindir && $special==''){
-
-			if(in_array($tablename,$this->sitetable)){
-				if(is_numeric($this->config['did'])){
-					$where['did']=$this->config['did'];
-				}
-			}
-		}
-		$whereNew	=	$this->checkWhere($where);
-		
-		$cachename  =  $tablename.$whereNew;
-		
-		if(!$row_return=$this->Memcache_set($cachename)){//获取是否存在memcache
-		    
-			$row_return=array();  
-			
-			/*if($this->siteadmindir&&$special==''){
-
-					$whereNew = $this->site_fetchsql($whereNew,$tablename);
-			}  */
-			
-			$SQL = "SELECT $select FROM `" . $this->def . $tablename . "`" . $whereNew;
-			$query = $this->db->query($SQL);
-			
-            while($row=$this->db->fetch_array($query)){
+    function DB_select_num($tablename, $where = '', $select = "*", $tablename2 = '', $special = '') {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        $cachename = $tablename . $where;
+        if (!$return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            if ($tablename2) {
+                if ($this->siteadmindir && $special == '') {
+                    if (in_array($tablename, $this->sitetable) && is_numeric($this->config['did'])) {
+                        $Where = 'a.`did`=' . $this->config['did'] . "' and " . $Where;
+                    }
+                    if (in_array($tablename2, $this->sitetable) && is_numeric($this->config['did'])) {
+                        $Where = 'b.`did`=' . $this->config['did'] . "' and " . $Where;
+                    }
+                }
                 
-                $row_return[]  =  $row;
+                $SQL = "SELECT count($select) as num FROM " . $this->def . $tablename . " as a," . $this->def . $tablename2 . " as b  WHERE $where";
+            } else {
+                
+                
+                if ($this->siteadmindir && $special == '') {
+                    
+                    $where = $this->site_fetchsql($where, $tablename);
+                }
+                $SQL = "SELECT count($select) as num FROM " . $this->def . $tablename;
+                
+                if ($where) {
+                    $SQL .= " WHERE " . $where;
+                }
             }
-            $this->Memcache_set($cachename,$row_return);//设置memcache
-		}
+            $query = $this->db->query($SQL);
+            while ($row = $this->db->fetch_array($query)) {
+                $return = $row['num'];
+            }
+            $this->Memcache_set($cachename, $return);//设置memcache
+        }
+        if ($return < 1) {
+            $return = '0';
+        }
+        return $return;
+    }
+    
+    function select_num($tablename, $where = array(), $select = "*") {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        if ($this->siteadmindir) {
+            if (in_array($tablename, $this->sitetable)) {
+                if (is_numeric($this->config['did'])) {
+                    $where['did'] = $this->config['did'];
+                }
+            }
+        }
+        $whereNew = $this->checkWhere($where);
+        $cachename = $tablename . $whereNew;
+        
+        if (!$return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            
+            $SQL = "SELECT count($select) as num FROM " . $this->def . $tablename . $whereNew;
+            
+            $query = $this->db->query($SQL);
+            while ($row = $this->db->fetch_array($query)) {
+                $return = $row['num'];
+            }
+            $this->Memcache_set($cachename, $return);//设置memcache
+        }
+        if ($return < 1) {
+            $return = '0';
+        }
+        return $return;
+    }
+    
+    /**
+     * 通用query查询 $tablename,$where = 1, $select="*"
+     *$special:标记某些特殊查询,不使用did参数。
+     *2016-1-14        LGL
+     */
+    function DB_select_query($tablename, $where = 1, $select = "*", $special = '') {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        if ($this->siteadmindir) {
+            
+            $where = $this->site_fetchsql($where, $tablename);
+        }
+        $SQL = "SELECT $select FROM " . $this->def . $tablename . " WHERE $where";
+        $query = $this->db->query($SQL);
+        return $query;
+    }
+    
+    /**
+     * 通用all查询 $tablename,$where = 1, $select="*"
+     *$special:标记某些特殊查询,不使用did参数。
+     */
+    function DB_select_all($tablename, $where = 1, $select = "*", $special = '') {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        
+        $cachename = $tablename . $where;
+        if (!$row_return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            $row_return = array();
+            if ($this->siteadmindir && $special == '') {
+                
+                $where = $this->site_fetchsql($where, $tablename);
+            }
+            $SQL = "SELECT $select FROM `" . $this->def . $tablename . "`";
+            
+            if ($where) {
+                $SQL .= " WHERE " . $where;
+            }
+            
+            $query = $this->db->query($SQL);
+            while ($row = $this->db->fetch_array($query)) {
+                $row_return[] = $row;
+            }
+            $this->Memcache_set($cachename, $row_return);//设置memcache
+        }
         return $row_return;
-	}
-	/**
+    }
+    
+    //新多条查询
+    function select_all($tablename, $where = array(), $select = "*", $special = '') {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        
+        if ($this->siteadmindir && $special == '') {
+            
+            if (in_array($tablename, $this->sitetable)) {
+                if (is_numeric($this->config['did'])) {
+                    $where['did'] = $this->config['did'];
+                }
+            }
+        }
+        $whereNew = $this->checkWhere($where);
+        
+        $cachename = $tablename . $whereNew;
+        
+        if (!$row_return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            
+            $row_return = array();
+            
+            /*if($this->siteadmindir&&$special==''){
+
+                    $whereNew = $this->site_fetchsql($whereNew,$tablename);
+            }  */
+            
+            $SQL = "SELECT $select FROM `" . $this->def . $tablename . "`" . $whereNew;
+            $query = $this->db->query($SQL);
+            
+            while ($row = $this->db->fetch_array($query)) {
+                
+                $row_return[] = $row;
+            }
+            $this->Memcache_set($cachename, $row_return);//设置memcache
+        }
+        return $row_return;
+    }
+    
+    /**
      * 通用all查询双表 $tablename1,$tablename2, $where = 1, $select = "*"
      */
-	function DB_select_alls($tablename1,$tablename2, $where = 1, $select = "*") {
-		if(!$this->checkTableName($tablename1)){
-			
-			return false;
-		}
-		if(!$this->checkTableName($tablename2)){
-			
-			return false;
-		}
-		$cachename=$tablename1.$tablename2.$where;
-		if(!$row_return=$this->Memcache_set($cachename)){//获取是否存在memcache
-
-
-			if($this->siteadmindir){
-
-				 if(in_array($tablename1,$this->sitetable) && is_numeric($this->config['did'])){
-						$where='a.`did`='.$this->config['did']." and ".$where;
-				 }
-				 if(in_array($tablename2,$this->sitetable) && is_numeric($this->config['did'])){
-
-
-						$where='b.`did`='.$this->config['did']." and ".$where;
-				 }
-			}
-			$SQL = "SELECT $select FROM " . $this->def . $tablename1. " as a," . $this->def . $tablename2 . " as b WHERE $where";
-
-			$query=$this->db->query($SQL);
-            while($row=$this->db->fetch_array($query)){$row_return[]=$row;}
-            $this->Memcache_set($cachename,$row_return);//设置memcache
-		}
-
+    function DB_select_alls($tablename1, $tablename2, $where = 1, $select = "*") {
+        if (!$this->checkTableName($tablename1)) {
+            
+            return FALSE;
+        }
+        if (!$this->checkTableName($tablename2)) {
+            
+            return FALSE;
+        }
+        $cachename = $tablename1 . $tablename2 . $where;
+        if (!$row_return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            
+            
+            if ($this->siteadmindir) {
+                
+                if (in_array($tablename1, $this->sitetable) && is_numeric($this->config['did'])) {
+                    $where = 'a.`did`=' . $this->config['did'] . " and " . $where;
+                }
+                if (in_array($tablename2, $this->sitetable) && is_numeric($this->config['did'])) {
+                    
+                    
+                    $where = 'b.`did`=' . $this->config['did'] . " and " . $where;
+                }
+            }
+            $SQL = "SELECT $select FROM " . $this->def . $tablename1 . " as a," . $this->def . $tablename2 . " as b WHERE $where";
+            
+            $query = $this->db->query($SQL);
+            while ($row = $this->db->fetch_array($query)) {
+                $row_return[] = $row;
+            }
+            $this->Memcache_set($cachename, $row_return);//设置memcache
+        }
+        
         return $row_return;
-	}
-	/**
-
+    }
+    
+    /**
      * 单表单条插入 $tablename, $value
      */
-	function DB_insert_once($tablename, $value){
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		if(in_array($tablename,$this->sitetable) && strpos($value,'`did`')===false){
-			$value.=",`did`='".$this->config['did']."'";
-		} 
-		$SQL = "INSERT INTO `" . $this->def . $tablename . "` SET ".$value;
- 
-		$this->db->query("set sql_mode=''");
-		$this->db->query($SQL);
-		$nid= $this->db->insert_id();
-		return $nid;
-	}
-
+    function DB_insert_once($tablename, $value) {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        if (in_array($tablename, $this->sitetable) && strpos($value, '`did`') === FALSE) {
+            $value .= ",`did`='" . $this->config['did'] . "'";
+        }
+        $SQL = "INSERT INTO `" . $this->def . $tablename . "` SET " . $value;
+        
+        $this->db->query("set sql_mode=''");
+        $this->db->query($SQL);
+        $nid = $this->db->insert_id();
+        return $nid;
+    }
+    
     //一次插入多条数据,方便本地测试数据库构造数据进行测试
-    function DB_insert_multi($tablename, $valueArr){
+    function DB_insert_multi($tablename, $valueArr) {
         // INSERT INTO `roles` (`uid`,`rid`) VALUES
         //    (534,14),(535,14),(536,14),(537,14),(539,14)
-	    if(!$this->checkTableName($tablename)){
-		    return false;
-	    }
-        include(PLUS_PATH.'dbstruct.cache.php');
-        $TableFullName=$this->def.$tablename;
-        if(is_array($$TableFullName)){
+        if (!$this->checkTableName($tablename)) {
+            return FALSE;
+        }
+        include(PLUS_PATH . 'dbstruct.cache.php');
+        $TableFullName = $this->def . $tablename;
+        if (is_array($$TableFullName)) {
             $fieldsArr = array_keys($$TableFullName);
         }
-        if($fieldsArr){
+        if ($fieldsArr) {
             $fields = array();
-            foreach($valueArr[0] as $f => $v){
-                if(in_array($f, $fieldsArr)){
+            foreach ($valueArr[0] as $f => $v) {
+                if (in_array($f, $fieldsArr)) {
                     $fields [] = "`$f`";
                 }
             }
             $fields = implode(',', $fields);
-          
+            
             $values = array();
-            foreach($valueArr as $r){
+            foreach ($valueArr as $r) {
                 $arr = array();
-                foreach($r as $k => $v){
-                    if(in_array($k, $fieldsArr)){
+                foreach ($r as $k => $v) {
+                    if (in_array($k, $fieldsArr)) {
                         $arr [] = "'" . $this->db->escape_string($v) . "'";
                     }
                 }
@@ -559,107 +576,108 @@
             $values = implode(',', $values);
             $SQL = "INSERT INTO `{$this->def}{$tablename}` ($fields) VALUES $values";
             $this->db->query("set sql_mode=''");
-            $return=$this->db->query($SQL);
+            $return = $this->db->query($SQL);
             return $return;
         }
     }
-	/**
+    
+    /**
      * 更新 $tablename, $value, $where = 1
      */
-	function DB_update_all($tablename, $value, $where ,$pecial=''){
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
+    function DB_update_all($tablename, $value, $where, $pecial = '') {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
         
-		if(empty($where) || empty($value)){
-		    return false;
-		}
-		
-        $SQL = "UPDATE `" . $this->def . $tablename . "` SET $value  ".$where; 
-
- 
+        if (empty($where) || empty($value)) {
+            return FALSE;
+        }
+        
+        $SQL = "UPDATE `" . $this->def . $tablename . "` SET $value  " . $where;
+        
+        
         $this->db->query("set sql_mode=''");
-		$return=$this->db->query($SQL);
-		return $return;
-	}
-
-	/**
+        $return = $this->db->query($SQL);
+        return $return;
+    }
+    
+    /**
      * 删除 $tablename, $value, $where = 1
      */
-	function DB_delete_all($tablename, $where, $limit = 'limit 1',$pecial='', $norecycle = ''){
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		if(empty($where)){
-			return false;
-		}
-		if($pecial!=$tablename){
-			//快速创建简历保存数据不进入回收站
-			if(!in_array($tablename,array('temporary_resume')) && $norecycle != '1'){
-				$this->insert_recycle($tablename,$this->site_fetchsql($where,$tablename));//先执行回收站
-			}
-			$SQL = "DELETE FROM `" . $this->def . $tablename . "` WHERE ".$this->site_fetchsql($where,$tablename)." $limit";
-		}else{
-			//快速创建简历保存数据不进入回收站
-			if(!in_array($tablename,array('temporary_resume')) && $norecycle != '1'){
-				$this->insert_recycle($tablename,$where);//先执行回收站
-			}
-			$SQL = "DELETE FROM `" . $this->def . $tablename . "` WHERE ".$where." $limit";
-		}
-		
-		$this->db->query("set `sql_mode`=''");
-		return $this->db->query($SQL);
-	}
-	/**
-	 *	@desc 删除数据库
-	 *  @param	$tablename	数据表名;
-				$where		删除数据表数据查询条件;
-				$limit		删除记录数
-				$pecial		暂未发现使用
-				$norecycle	1:不做回收站插入操作
-	 */
-	function delete_all($tablename, $where = array(), $limit = 'limit 1', $special='', $norecycle = '')
-	{
-
-		if(!$this->checkTableName($tablename)){
-
-			return false;
-		}
-		include(PLUS_PATH.'dbstruct.cache.php');
-
-		if($this->siteadmindir && $special==''){
-
-			if(in_array($tablename,$this->sitetable)){
-				if(is_numeric($this->config['did'])){
-					$where['did']=$this->config['did'];
-				}
-			}
-		}
-
-		$whereNew	=	$this->checkWhere($where);
-
-
-		if(!empty($whereNew)){
-
-			//快速创建简历保存数据不进入回收站
-			if(!in_array($tablename,array('temporary_resume')) && $norecycle!='1'){
-
-				$this->insert_recycle($tablename,$whereNew);//先执行回收站
-			}
-
-			$SQL	= "DELETE FROM `" . $this->def . $tablename . "` ".$whereNew." ".$limit;
-
-		}else{
-
-			return false;
-		}
-
-		$this->db->query("set `sql_mode`=''");
-		return $this->db->query($SQL);
-	}
-
+    function DB_delete_all($tablename, $where, $limit = 'limit 1', $pecial = '', $norecycle = '') {
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        if (empty($where)) {
+            return FALSE;
+        }
+        if ($pecial != $tablename) {
+            //快速创建简历保存数据不进入回收站
+            if (!in_array($tablename, array('temporary_resume')) && $norecycle != '1') {
+                $this->insert_recycle($tablename, $this->site_fetchsql($where, $tablename));//先执行回收站
+            }
+            $SQL = "DELETE FROM `" . $this->def . $tablename . "` WHERE " . $this->site_fetchsql($where, $tablename) . " $limit";
+        } else {
+            //快速创建简历保存数据不进入回收站
+            if (!in_array($tablename, array('temporary_resume')) && $norecycle != '1') {
+                $this->insert_recycle($tablename, $where);//先执行回收站
+            }
+            $SQL = "DELETE FROM `" . $this->def . $tablename . "` WHERE " . $where . " $limit";
+        }
+        
+        $this->db->query("set `sql_mode`=''");
+        return $this->db->query($SQL);
+    }
+    
+    /**
+     * @desc 删除数据库
+     * @param    $tablename    数据表名;
+     * $where        删除数据表数据查询条件;
+     * $limit        删除记录数
+     * $pecial        暂未发现使用
+     * $norecycle    1:不做回收站插入操作
+     */
+    function delete_all($tablename, $where = array(), $limit = 'limit 1', $special = '', $norecycle = '') {
+        
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        include(PLUS_PATH . 'dbstruct.cache.php');
+        
+        if ($this->siteadmindir && $special == '') {
+            
+            if (in_array($tablename, $this->sitetable)) {
+                if (is_numeric($this->config['did'])) {
+                    $where['did'] = $this->config['did'];
+                }
+            }
+        }
+        
+        $whereNew = $this->checkWhere($where);
+        
+        
+        if (!empty($whereNew)) {
+            
+            //快速创建简历保存数据不进入回收站
+            if (!in_array($tablename, array('temporary_resume')) && $norecycle != '1') {
+                
+                $this->insert_recycle($tablename, $whereNew);//先执行回收站
+            }
+            
+            $SQL = "DELETE FROM `" . $this->def . $tablename . "` " . $whereNew . " " . $limit;
+            
+        } else {
+            
+            return FALSE;
+        }
+        
+        $this->db->query("set `sql_mode`=''");
+        return $this->db->query($SQL);
+    }
+    
     /**
      * 删除进入回收站
      *
@@ -667,645 +685,652 @@
      * @param $where
      * @return bool
      */
-    function insert_recycle($tablename, $where)
-    {
-
+    function insert_recycle($tablename, $where) {
+        
         if (!$this->checkTableName($tablename)) {
-
-            return false;
+            
+            return FALSE;
         }
         //回收站同一次操作生成数据MD5用作识别同一次操作的标识符
         if (!$this->__isset('recyclemd5')) {
-
-            $recyclemd5 =   md5($tablename.$where);
-
+            
+            $recyclemd5 = md5($tablename . $where);
+            
             $this->__set('recyclemd5', $recyclemd5);
-
+            
         } else {
             //获取当前操作模块的统一标识符
-            $recyclemd5 =   $this->__get('recyclemd5');
+            $recyclemd5 = $this->__get('recyclemd5');
         }
-
+        
         if (!isset($_GET['isdel']) || $_GET['isdel'] != "all") {
-
-            $value  =   "tablename = '" . $tablename . "', ";
-            $value  .=   "ctime = '" . time() . "', ";
-
+            
+            $value = "tablename = '" . $tablename . "', ";
+            $value .= "ctime = '" . time() . "', ";
+            
             if (isset($_SESSION['auid']) && isset($_SESSION['ausername']) && $_SESSION['auid'] && $_SESSION['ausername']) {
-
-                $username   =   $_SESSION['ausername'];
-                $uid        =   $_SESSION['auid'];
+                
+                $username = $_SESSION['ausername'];
+                $uid = $_SESSION['auid'];
             } else {
-
-                $username   =   isset($this->username) ? $this->username : '';
-                $uid        =   isset($this->uid) ? $this->uid : '';
+                
+                $username = isset($this->username) ? $this->username : '';
+                $uid = isset($this->uid) ? $this->uid : '';
             }
-
-            $value  .=  "uid = '" . $uid . "', ";
-            $value  .=  "username = '" . $username . "', ";
-            $value  .=  "uri = '" . $_SERVER['REQUEST_URI'] . "', ";
-
-            $query  =   $this->db->query("SELECT * FROM " . $this->def . $tablename . "  $where");
-            $row_del=   array();
+            
+            $value .= "uid = '" . $uid . "', ";
+            $value .= "username = '" . $username . "', ";
+            $value .= "uri = '" . $_SERVER['REQUEST_URI'] . "', ";
+            
+            $query = $this->db->query("SELECT * FROM " . $this->def . $tablename . "  $where");
+            $row_del = array();
             while ($row = $this->db->fetch_assoc($query)) {
-                $row_del[]  =   $row;
+                $row_del[] = $row;
             }
-
+            
             if (!empty($row_del)) {
-
+                
                 foreach ($row_del as $delvalue) {
-
+                    
                     $this->DB_insert_once('recycle', $value . "`body`='" . serialize($delvalue) . "',`ident`='" . $recyclemd5 . "'");
                 }
             }
         }
     }
-
+    
     /**
      * 自定义SQL执行 便于多表联合、left join等组合查询语句
      */
-    function DB_query_all($sql, $type = 'one')
-    {
-
+    function DB_query_all($sql, $type = 'one') {
+        
         $this->db->query("set sql_mode=''");
-
-        $query  =   $this->db->query($sql);
-
+        
+        $query = $this->db->query($sql);
+        
         if ($type == 'all') {
-
+            
             while ($row = $this->db->fetch_array($query)) {
-                $return[]   =   $row;
+                $return[] = $row;
             }
         } else {
-
-            $return         =   $this->db->fetch_array($query);
+            
+            $return = $this->db->fetch_array($query);
         }
         return $return;
     }
-	/**
+    
+    /**
      * 通用单条查询$tablename,$where = 1, $select="*"
-	
      */
-	function DB_select_once($tablename, $where = 1, $select = "*",$special='') {
-
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		
-		$cachename=$tablename.$where;
-
-		if(!$return=$this->Memcache_set($cachename)){//获取是否存在memcache
-			if($this->siteadmindir	&&	$special==''){
-				$where = $this->site_fetchsql($where,$tablename);
-			}
-			$SQL = 'SELECT '.$select.' FROM ' . $this->def . $tablename;
-			if($where)
-			{
-				$SQL .= ' WHERE '.$where;
-			}
-			$SQL .= ' LIMIT 1';
-			$query = $this->db->query($SQL);
-			$return=$this->db->fetch_array($query);
-			$this->Memcache_set($cachename,$return);//设置memcache
-		}
-		return $return;
-	}
-	//新单条查询
-	function select_once($tablename, $where = array(), $select = "*",$special='') {
-
-		if(!$this->checkTableName($tablename)){
-			
-			return false;
-		}
-		
-		if($this->siteadmindir && $special==''){
-
-			if(in_array($tablename,$this->sitetable)){
-				if(is_numeric($this->config['did'])){
-					$where['did']=$this->config['did'];
-				}
-			}
-		}
-		$whereNew = $this->checkWhere($where);
-		
-		$cachename=$tablename.$whereNew;
-
-		if(!$return=$this->Memcache_set($cachename)){//获取是否存在memcache
-			/*if($this->siteadmindir	&&	$special==''){
-				$whereNew = $this->site_fetchsql($whereNew,$tablename);
-			}*/
-			$SQL = 'SELECT '.$select.' FROM ' . $this->def . $tablename . $whereNew;
-			
-			$SQL .= ' LIMIT 1';
-  
-			$query = $this->db->query($SQL);
-			$return=$this->db->fetch_array($query);
-			$this->Memcache_set($cachename,$return);//设置memcache
-		}
-		return $return;
-	}
-
-	function member_log($content,$opera='',$type='',$uid=null,$usertype=null){//会员日志
-	    if(!$uid && !$usertype){
-	        $uid = intval($_COOKIE['uid']);
-	        $usertype = intval($_COOKIE['usertype']);
-	    }
-	    if($uid && $usertype){
-	        $value="`uid`='".$uid."',";
-	        $value.="`usertype`='".$usertype."',";
-			$value.="`content`='".$content."',";
-			$value.="`opera`='".$opera."',";
-			$value.="`type`='".$type."',";
-			$value.="`ip`='".fun_ip_get()."',";
-			$value.="`ctime`='".time()."'";
-			$this->DB_insert_once("member_log",$value);
-		}
-	}
-    function FormatOptions($Options){
-        if(!is_array($Options)){return array('field'=>'*','where'=>'');}
-        $WhereStr='';
-        if($Options['field']){
-            $Field=$Options['field'];
-            unset($Options['field']);
-        }else{
-            $Field='*';
+    function DB_select_once($tablename, $where = 1, $select = "*", $special = '') {
+        
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
         }
-		if($Options['special']){
-            $special=$Options['special'];
+        
+        $cachename = $tablename . $where;
+        
+        if (!$return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            if ($this->siteadmindir && $special == '') {
+                $where = $this->site_fetchsql($where, $tablename);
+            }
+            $SQL = 'SELECT ' . $select . ' FROM ' . $this->def . $tablename;
+            if ($where) {
+                $SQL .= ' WHERE ' . $where;
+            }
+            $SQL .= ' LIMIT 1';
+            $query = $this->db->query($SQL);
+            $return = $this->db->fetch_array($query);
+            $this->Memcache_set($cachename, $return);//设置memcache
+        }
+        return $return;
+    }
+    
+    //新单条查询
+    function select_once($tablename, $where = array(), $select = "*", $special = '') {
+        
+        if (!$this->checkTableName($tablename)) {
+            
+            return FALSE;
+        }
+        
+        if ($this->siteadmindir && $special == '') {
+            
+            if (in_array($tablename, $this->sitetable)) {
+                if (is_numeric($this->config['did'])) {
+                    $where['did'] = $this->config['did'];
+                }
+            }
+        }
+        $whereNew = $this->checkWhere($where);
+        
+        $cachename = $tablename . $whereNew;
+        
+        if (!$return = $this->Memcache_set($cachename)) {//获取是否存在memcache
+            /*if($this->siteadmindir	&&	$special==''){
+                $whereNew = $this->site_fetchsql($whereNew,$tablename);
+            }*/
+            $SQL = 'SELECT ' . $select . ' FROM ' . $this->def . $tablename . $whereNew;
+            
+            $SQL .= ' LIMIT 1';
+            
+            $query = $this->db->query($SQL);
+            $return = $this->db->fetch_array($query);
+            $this->Memcache_set($cachename, $return);//设置memcache
+        }
+        return $return;
+    }
+    
+    function member_log($content, $opera = '', $type = '', $uid = NULL, $usertype = NULL) {//会员日志
+        if (!$uid && !$usertype) {
+            $uid = intval($_COOKIE['uid']);
+            $usertype = intval($_COOKIE['usertype']);
+        }
+        if ($uid && $usertype) {
+            $value = "`uid`='" . $uid . "',";
+            $value .= "`usertype`='" . $usertype . "',";
+            $value .= "`content`='" . $content . "',";
+            $value .= "`opera`='" . $opera . "',";
+            $value .= "`type`='" . $type . "',";
+            $value .= "`ip`='" . fun_ip_get() . "',";
+            $value .= "`ctime`='" . time() . "'";
+            $this->DB_insert_once("member_log", $value);
+        }
+    }
+    
+    function FormatOptions($Options) {
+        if (!is_array($Options)) {
+            return array('field' => '*', 'where' => '');
+        }
+        $WhereStr = '';
+        if ($Options['field']) {
+            $Field = $Options['field'];
+            unset($Options['field']);
+        } else {
+            $Field = '*';
+        }
+        if ($Options['special']) {
+            $special = $Options['special'];
             unset($Options['special']);
         }
-		if($Options['groupby']){
-            $WhereStr.=' group by '.$Options['groupby'];
+        if ($Options['groupby']) {
+            $WhereStr .= ' group by ' . $Options['groupby'];
         }
-        if($Options['orderby']){
-            $WhereStr.=' order by '.$Options['orderby'];
+        if ($Options['orderby']) {
+            $WhereStr .= ' order by ' . $Options['orderby'];
         }
-
-		if($Options['desc']){
-            $WhereStr.=" ".$Options['desc'];
+        
+        if ($Options['desc']) {
+            $WhereStr .= " " . $Options['desc'];
         }
-        if($Options['limit']){
-            $WhereStr.=' limit '.$Options['limit'];
+        if ($Options['limit']) {
+            $WhereStr .= ' limit ' . $Options['limit'];
         }
-        return array('field'=>$Field,'order'=>$WhereStr,"special"=>$special);
+        return array('field' => $Field, 'order' => $WhereStr, "special" => $special);
     }
-	function FormatWhere($Where){
-        $WhereStr='1';
-        foreach($Where as $k=>$v){
+    
+    function FormatWhere($Where) {
+        $WhereStr = '1';
+        foreach ($Where as $k => $v) {
             //两种方式:1,'uid'=>1 ; 2,'`uid` in (1,2,3)'
             //TODO:检查字段是否存在
-            if(is_numeric($k)){
-                if((substr(trim($v),0,3)=='and')||(substr(trim($v),0,2)=='or')){
-                    $WhereStr.=' '.$v;
-                }elseif($v){
-                    $WhereStr.=' and '.$v;
+            if (is_numeric($k)) {
+                if ((substr(trim($v), 0, 3) == 'and') || (substr(trim($v), 0, 2) == 'or')) {
+                    $WhereStr .= ' ' . $v;
+                } elseif ($v) {
+                    $WhereStr .= ' and ' . $v;
                 }
-            }else{
-				/* where允许的格式:
-					$where = array('uid' => $this->uid,
-						'name <> ' => '',
-						'age > '   => '18',
-						'height <' => '65'
-					);
-				*/
-				if(strpos($k,'<>') > 0){
-					$position = strpos($k,'<>');
-					$fieldName = trim(substr($k,0,$position));
-					$WhereStr .=' and `'.$fieldName.'` <> \''.$v.'\'';
-				}
-				elseif(strpos($k,'<') > 0){
-					$position = strpos($k,'<');
-					$fieldName = trim(substr($k,0,$position));
-					$WhereStr .=' and `'.$fieldName.'` < \''.$v.'\'';
-				}
-				elseif(strpos($k,'>') > 0){
-					$position = strpos($k,'>');
-					$fieldName = trim(substr($k,0,$position));
-					$WhereStr .=' and `'.$fieldName.'` > \''.$v.'\'';
-				}
-				else{
-					$WhereStr .=' and `'.$k.'`=\''.$v.'\'';
-				}
+            } else {
+                /* where允许的格式:
+                    $where = array('uid' => $this->uid,
+                        'name <> ' => '',
+                        'age > '   => '18',
+                        'height <' => '65'
+                    );
+                */
+                if (strpos($k, '<>') > 0) {
+                    $position = strpos($k, '<>');
+                    $fieldName = trim(substr($k, 0, $position));
+                    $WhereStr .= ' and `' . $fieldName . '` <> \'' . $v . '\'';
+                } elseif (strpos($k, '<') > 0) {
+                    $position = strpos($k, '<');
+                    $fieldName = trim(substr($k, 0, $position));
+                    $WhereStr .= ' and `' . $fieldName . '` < \'' . $v . '\'';
+                } elseif (strpos($k, '>') > 0) {
+                    $position = strpos($k, '>');
+                    $fieldName = trim(substr($k, 0, $position));
+                    $WhereStr .= ' and `' . $fieldName . '` > \'' . $v . '\'';
+                } else {
+                    $WhereStr .= ' and `' . $k . '`=\'' . $v . '\'';
+                }
             }
         }
         return $WhereStr;
     }
-	function FormatValues($Values){
-        $ValuesStr='';
-        foreach($Values as $k=>$v){
+    
+    function FormatValues($Values) {
+        $ValuesStr = '';
+        foreach ($Values as $k => $v) {
             //两种方式:1,'uid'=>1 ; 2,'`uid` in (1,2,3)'
             //TODO:检查字段是否存在
-			if(preg_match("/^[a-zA-Z0-9_]+$/",$k)){
-				 if(preg_match('/^[0-9]+$/', $k)){
-					$FiledList = @explode(',',$v);
-					if(is_array($FiledList)){
-						foreach($FiledList as $Fv){
-							$FvList = @explode('=',$Fv);
-							if($FvList[1]){
-									if(strpos($FvList[1],'+') > 0){
-										$FiledV = @explode('+',$FvList[1]);
-										$ValuesStr.=',`'.str_replace("`",'',$FvList[0]).'`=`'.str_replace("`",'',$FiledV[0]).'`+\''.intval(str_replace("'",'',$FiledV[1])).'\'';
-									}
-									if(strpos($FvList[1],'-') > 0){
-										$FiledV = @explode('-',$FvList[1]);
-										$ValuesStr.=',`'.str_replace("`",'',$FvList[0]).'`=`'.str_replace("`",'',$FiledV[0]).'`-\''.intval(str_replace("'",'',$FiledV[1])).'\'';
-									}
-
-							}
-						}
-					}
-				}else{
-					$ValuesStr.=',`'.$k.'`=\''.$v.'\'';
-				}
-			}
-
+            if (preg_match("/^[a-zA-Z0-9_]+$/", $k)) {
+                if (preg_match('/^[0-9]+$/', $k)) {
+                    $FiledList = @explode(',', $v);
+                    if (is_array($FiledList)) {
+                        foreach ($FiledList as $Fv) {
+                            $FvList = @explode('=', $Fv);
+                            if ($FvList[1]) {
+                                if (strpos($FvList[1], '+') > 0) {
+                                    $FiledV = @explode('+', $FvList[1]);
+                                    $ValuesStr .= ',`' . str_replace("`", '', $FvList[0]) . '`=`' . str_replace("`", '', $FiledV[0]) . '`+\'' . intval(str_replace("'", '', $FiledV[1])) . '\'';
+                                }
+                                if (strpos($FvList[1], '-') > 0) {
+                                    $FiledV = @explode('-', $FvList[1]);
+                                    $ValuesStr .= ',`' . str_replace("`", '', $FvList[0]) . '`=`' . str_replace("`", '', $FiledV[0]) . '`-\'' . intval(str_replace("'", '', $FiledV[1])) . '\'';
+                                }
+                                
+                            }
+                        }
+                    }
+                } else {
+                    $ValuesStr .= ',`' . $k . '`=\'' . $v . '\'';
+                }
+            }
+            
         }
-        return substr($ValuesStr,1);
+        return substr($ValuesStr, 1);
     }
-	
-	//提醒处理
-    function RemindDeal($TableName,$Values=array(),$Where=array()){
-		if(!$this->checkTableName($TableName)){
-
-			return false;
-		}
-        $ValuesStr  =   $this->FormatValues($Values);
-        $WhereStr   =   $this->FormatWhere($Where);
-        $this->DB_update_all($TableName,$ValuesStr,$WhereStr);
+    
+    //提醒处理
+    function RemindDeal($TableName, $Values = array(), $Where = array()) {
+        if (!$this->checkTableName($TableName)) {
+            
+            return FALSE;
+        }
+        $ValuesStr = $this->FormatValues($Values);
+        $WhereStr = $this->FormatWhere($Where);
+        $this->DB_update_all($TableName, $ValuesStr, $WhereStr);
     }
-    function site_fetchsql($Where,$TableName,$SplitChar=' and '){
-		if(!$this->checkTableName($TableName)){
-			
-			return false;
-		}
-        if(in_array($TableName,$this->sitetable)){
-            if(is_array($Where)&&is_numeric($this->config['did'])){
-				$Where['did']=$this->config['did'];
-            }else if(is_numeric($this->config['did'])){
-				$Where='`did`='.$this->config['did'].$SplitChar.$Where;
+    
+    function site_fetchsql($Where, $TableName, $SplitChar = ' and ') {
+        if (!$this->checkTableName($TableName)) {
+            
+            return FALSE;
+        }
+        if (in_array($TableName, $this->sitetable)) {
+            if (is_array($Where) && is_numeric($this->config['did'])) {
+                $Where['did'] = $this->config['did'];
+            } else if (is_numeric($this->config['did'])) {
+                $Where = '`did`=' . $this->config['did'] . $SplitChar . $Where;
             }
         }
         return $Where;
     }
-
-	//调用分页,$table表名,$where条件,$pageurl分页链接,$limit条数,$rowsname模板接收变量,$pagenavname分页模板接收变量
-	function get_page($table,$where='',$pageurl='',$limit=20,$field='*',$rowsname='rows'){
-		if(!$this->checkTableName($table)){
-			
-			return false;
-		}
-		$rows=array();
-		$page=$_GET['page']<1?1:$_GET['page'];
-		$ststrsql=($page-1)*$limit;
-		$num=$this->DB_select_num($table,$where);
-		if($num>$limit){
-			$pages=ceil($num/$limit);
-            $pagenav=Page($page,$num,$limit,$pageurl,$notpl=false,null);
-		}
-		$rows=$this->DB_select_all($table,$where.' limit '.$ststrsql.','.$limit,$field);
-		return array('total'=>$num,'pagenav'=>$pagenav,$rowsname=>$rows);
-	}
-	function fetch_assoc(){
-	    return $this->db->fetch_assoc();
-	}
-	function checkTableName($table){
-	
-		 if (preg_match('/^[_a-z]{2,30}$/i',$table)){
-		  return true;
-		 }else {
-		  return false;
-		 } 
-	
-	}
-
-	
-	/*
-	*	$data		:	where条件, 字符串value 默认==:$where[id] = '1'; 
-	*								数组  value:$where['id'] = array('>','1','or/and');根据传入的or and 异或查询 默认AND
-	*	$key		:	PHPYUNBTW PHPYUNBTWEND 使用()组合优先级组合条件 如 (id>0 AND id<1)
-	*	$whereNew	:	拼接后的SQL条件,默认以AND 连接 
- 	*/
-	function checkWhere($where){
-		
-		
-		$whereNew	=	'';
-		
-		if(!empty($where) && is_array($where)){
-		    
-		    $limit  =  '';
-		    
-		    if(!empty($where['limit'])){
-			
-		        if(is_array($where['limit']))
-				{
-
-					$limit	=	' LIMIT '.(int)$where['limit'][0].','.(int)$where['limit'][1];
-
-				}else{
-
-				
-					$limit	=	' LIMIT '.(int)$where['limit'];
-				}
-
-				unset($where['limit']);
-				
-			}
-			
-			$orderby  =  '';
-			
-			if(!empty($where['orderby'])){
-
-				if(is_array($where['orderby']))
-				{
-					
-					$orderby	=	' ORDER BY ';
-					
-					foreach($where['orderby'] as $key=>$value){
+    
+    //调用分页,$table表名,$where条件,$pageurl分页链接,$limit条数,$rowsname模板接收变量,$pagenavname分页模板接收变量
+    function get_page($table, $where = '', $pageurl = '', $limit = 20, $field = '*', $rowsname = 'rows') {
+        if (!$this->checkTableName($table)) {
             
-						if($key>0)
-						{
-							$orderby	.=	',';
-						}
-           
-						$orders		 =	@explode(',',$value);
-
-						$orderby	.=	$orders[0].' ';
-						$orderby	.=	strtoupper(trim($orders[1])) == 'ASC' ? 'ASC':'DESC';
-						
-						$whereFiled[]	=	$orders[0];
-						
-
-					}
-					
-         
-
-				} elseif (stripos($where['orderby'], 'CASE WHEN') !== false)
-				{
-				    //CASE THEN END 条件排序
-				    
-				    $orderby        =   ' ORDER BY '.$where['orderby'];
-				    $whereFiled[]	=	'CASE';
-				    
-				}else{
-         
-					$orders		 =	@explode(',',$where['orderby']);
-					
-					$orderby	 =	' ORDER BY '.$orders[0].' ';
-					$orderby	.=	strtoupper(trim($orders[1])) == 'ASC' ? 'ASC':'DESC';
-
-					$whereFiled[]	=	$orders[0];
-				}
-				unset($where['orderby']);
-				
-			}
-      
-			if(!empty($where['orderbyfield'])){
-
-				if(is_array($where['orderbyfield']) && count($where['orderbyfield']) == 2){
-          
-					$orderby	=	' ORDER BY field('.$where['orderbyfield'][0].','.$where['orderbyfield'][1].')';
-
-					$whereFiled[]	=	$where['orderbyfield'][0];
-
-				}
-
-				unset($where['orderbyfield']);
-			}
-			
-			$groupby  =  $having =   '';
-			
-			if(!empty($where['groupby'])){
+            return FALSE;
+        }
+        $rows = array();
+        $page = $_GET['page'] < 1 ? 1 : $_GET['page'];
+        $ststrsql = ($page - 1) * $limit;
+        $num = $this->DB_select_num($table, $where);
+        if ($num > $limit) {
+            $pages = ceil($num / $limit);
+            $pagenav = Page($page, $num, $limit, $pageurl, $notpl = FALSE, NULL);
+        }
+        $rows = $this->DB_select_all($table, $where . ' limit ' . $ststrsql . ',' . $limit, $field);
+        return array('total' => $num, 'pagenav' => $pagenav, $rowsname => $rows);
+    }
+    
+    function fetch_assoc() {
+        return $this->db->fetch_assoc();
+    }
+    
+    function checkTableName($table) {
+        
+        if (preg_match('/^[_a-z]{2,30}$/i', $table)) {
+            return TRUE;
+        } else {
+            return FALSE;
+        }
+        
+    }
+    
+    
+    /*
+    *	$data		:	where条件, 字符串value 默认==:$where[id] = '1';
+    *								数组  value:$where['id'] = array('>','1','or/and');根据传入的or and 异或查询 默认AND
+    *	$key		:	PHPYUNBTW PHPYUNBTWEND 使用()组合优先级组合条件 如 (id>0 AND id<1)
+    *	$whereNew	:	拼接后的SQL条件,默认以AND 连接
+     */
+    function checkWhere($where) {
+        
+        
+        $whereNew = '';
+        
+        if (!empty($where) && is_array($where)) {
+            
+            $limit = '';
+            
+            if (!empty($where['limit'])) {
                 
-			    //   GROUP BY    和   HAVING 联合查询
-			    //   $key    :   having ;    $value  :   array(); 
-			    //   例如            :     array('having' => array('distance' => array('<', 20, ''), 'x' => array('<>', 0, 'AND')))  
-			    if (!empty($where['having'])) {
-			        
-			        $groupby		=	' GROUP  BY '.$where['groupby'];
-			        
-					$whereFiled[]	=	$where['groupby'];
-
-			        foreach ($where['having'] as $key => $value){
-			            
-			            if (is_array($value)) {
-			                
-			                //   HAVING 多条件查询; $value[2] : 异或查询 
-			                if($value[2] == 'OR' || $value[2] == 'or'){
-			                    
-			                    $btnAndOR    =   ' OR ';
-			                }else if($value[2] == 'AND' || $value[2] == 'and'){
-			                    
-			                    $btnAndOR    =   ' AND ';
-			                }else{
-			                    
-			                    $btnAndOR    =   '';
-			                }
-			                
-			                $having  =   $btnAndOR;
-			                $having  .=  $this->spilceWhere($key, $value);
-							
-							$whereFiled[]	=	$key;
-			            }
-			            
-			        }
-			        
-			        $groupby	.=	' HAVING '.$having;
-			        
-			        unset($where['having']);
-			        
-			    }else{
-			        
-			        $groupby	=	' GROUP  BY '.$where['groupby'];
-
-					$whereFiled[] = $where['groupby'];
-			    }
-
-				unset($where['groupby']);
-				
-			}
-			
-			foreach($where as $key=>$value){
-			    
-			    //PHPYUNBTWSTART_A  PHPYUNBTWEND_A  PHPYUNBTWSTART_B  PHPYUNBTWEND_B 这种可以组成多个()
-			    // PHPYUNBTWSTART_A_DOUBLE、PHPYUNBTWEND_B_DOUBLE 考虑有需要多重括号的方式,增加此种写法
-			    //考虑到部分需要使用()执行优先级条件查询判断的情况
-			    if(strpos($key, 'PHPYUNBTWSTART') !== false){
-			        
-			        if($whereNew!='')
-			        {
-			            $btwAndOr	=	($value=='OR' || $value == 'or') ?' OR ':' AND ';
-			        }else{
-			            $btwAndOr	=	'';
-			        }
-			        
-			        $whereNew .=	$btwAndOr.'(';
-			        // 带_DOUBLE为需要一个多的开始括号情况
-			        if(strpos($key, '_DOUBLE') !== false){
-			            $whereNew .=  '(';
-			        }
-			        //标识符 用于判断是否是()内首项条件 非首项条件 必须使用 AND/OR 连接
-			        $btwStr    =	1;
-			        
-			    }elseif(strpos($key, 'PHPYUNBTWEND') !== false){
-			        
-			        $whereNew .=	')';
-			        // 带_DOUBLE为需要一个多的结束括号情况
-			        if(strpos($key, '_DOUBLE') !== false){
-			            $whereNew .=  ')';
-			        }
-			        //取消标识符
-			        $btwStr    =	0;
-			        
-			    }else{
-					
-					//where格式不为纯字符串,则按照操作符函数进行处理
-					if(!empty($value) && is_array($value))
-					{
-						
-						//同一个字段 多项条件组合
-						if(is_array($value[0])){
-							
-							foreach($value as $sonv){
-								
-								if($whereNew!='' && $btwStr != 1)
-								{
-									
-								    $whereNew	.=	($sonv[2] == 'OR' || $sonv[2] == 'or') ? ' OR ' : ' AND ';
-								}
-								//根据value[0] 判断SQL操作符 并进行组合SQL语句
-								
-								$whereNew	.=	$this->spilceWhere($key,$sonv);
-
-								$whereFiled[] = $key;
-								
-								$btwStr    =	0;
-								
-						    }
-
-						}else{
-							if($whereNew!='' && $btwStr != 1)
-							{
-							    $whereNew	.=	(isset($value[2]) && ($value[2] == 'OR' || $value[2] == 'or')) ? ' OR ' : ' AND ';
-							}
-							//根据value[0] 判断SQL操作符 并进行组合SQL语句
-
-							$whereNew	.=	$this->spilceWhere($key,$value);
-
-							$whereFiled[] = $key;
-						}
-						
-					}else{
-						
-						//首项条件 排除AND连接符
-
-						if($whereNew!='' && $btwStr != 1)
-						{
-							$whereNew .=' AND ';
-						}
-						//纯字符串格式默认为 = 操作符
-						$whereNew .= "`".$key."`='".$this->db->escape_string($value)."'";
-
-						$whereFiled[] = $key;
-					}
-					$btwStr    =	0;
-				}
-			}
-		}
-		// 验证字段
-		
-		if(!empty($whereFiled)){
-			foreach($whereFiled as $value){
-				
-				if(!preg_match("/^[a-zA-Z0-9_`()]{1,30}$/",$value)){
-
-					$noFields = 1;
-					break;
-				}
-			}
-		}
-		
-		if(!isset($noFields)){
-		
-		
-			if($whereNew)
-			{
-				$whereNew	=	' WHERE '.$whereNew;
-			
-			}
-			$whereNew	.=	$groupby.$orderby.$limit;
-			return $whereNew;
-		}else{
-			
-		    $this->db->show_error();
-		}
-	
-	
-	}
-
-	function spilceWhere($daraKey,$dataV){
-	    
-		$Operator = array('=','>','>=','<','<=','<>','in','notin','isnull','notnull','like','findin','between','unixtime','like%','dateformat','in_s','regexp');
-		
-		if(in_array($dataV[0],$Operator)){
-		
-		    switch($dataV[0]){
-				
-				case	'notin'		: $sqlString = "`$daraKey` not in (".$this->db->escape_string($dataV[1]).")";
-				break;
-
-				case	'in'		: $sqlString = "`$daraKey`  in (".$dataV[1].")";
-				break;
-				
-				case	'isnull'	: $sqlString = "`$daraKey` is null";
-				break;
-				
-				case	'notnull'	: $sqlString = "`$daraKey` is not null";
-				break;
-				
-				case	'like'		: $sqlString = "`$daraKey` LIKE ('%".$this->db->escape_string($dataV[1])."%')";
-				break;
-				
-				case	'findin'    : $sqlString = "FIND_IN_SET('".$this->db->escape_string($dataV[1])."',`$daraKey`)";
-				break;
-				
-				case	'between'	: $betweens = explode(',', $dataV[1]);$sqlString = "$daraKey between $betweens[0] AND $betweens[1]";
-				break;
-				
-				case    'unixtime'  : $sqlString =  "UNIX_TIMESTAMP(`$daraKey`) ".$this->db->escape_string($dataV[1])." '$dataV[2]'";
-				break;
-				
-				case	'like%'		: $sqlString = "`$daraKey` LIKE ('".$this->db->escape_string($dataV[1])."%')";
-				break;
-				
-				case	'dateformat': $sqlString = "date_format(`$daraKey`,'".$dataV[1]."')=date_format(now(),'".$this->db->escape_string($dataV[1])."')";
-				break;
-				// 字符串型的in
-				case	'in_s'		: $sqlString = "`$daraKey`  in ('".$dataV[1]."')";
-				break;
-				// 处理值匹配
-				case	'regexp'	: $sqlString = "(`$daraKey` REGEXP '".$dataV[1]."')=0";
-				break;
-				default				: 
-				    // 传入字段中包含sql函数的,两边不需要加`
-				    $keystr     =  !preg_match("/[)]/",$daraKey) ? "`$daraKey` " : "$daraKey ";
-				    $sqlString  =  $keystr.$this->db->escape_string($dataV[0])." '$dataV[1]'";
-			}
-		
-		}else{
-			
-		    $this->db->show_error();
-		}
-		
-		return $sqlString;
-	
-	}
-	function uc_open(){
-		include APP_PATH.'data/api/uc/config.inc.php';
-		include APP_PATH.'/api/uc/include/db_mysql.class.php';
-		include APP_PATH.'/api/uc/uc_client/client.php';
-
-		return $ucinfo;
-	}
+                if (is_array($where['limit'])) {
+                    
+                    $limit = ' LIMIT ' . (int)$where['limit'][0] . ',' . (int)$where['limit'][1];
+                    
+                } else {
+                    
+                    
+                    $limit = ' LIMIT ' . (int)$where['limit'];
+                }
+                
+                unset($where['limit']);
+                
+            }
+            
+            $orderby = '';
+            
+            if (!empty($where['orderby'])) {
+                
+                if (is_array($where['orderby'])) {
+                    
+                    $orderby = ' ORDER BY ';
+                    
+                    foreach ($where['orderby'] as $key => $value) {
+                        
+                        if ($key > 0) {
+                            $orderby .= ',';
+                        }
+                        
+                        $orders = @explode(',', $value);
+                        
+                        $orderby .= $orders[0] . ' ';
+                        $orderby .= strtoupper(trim($orders[1])) == 'ASC' ? 'ASC' : 'DESC';
+                        
+                        $whereFiled[] = $orders[0];
+                        
+                        
+                    }
+                    
+                    
+                } elseif (stripos($where['orderby'], 'CASE WHEN') !== FALSE) {
+                    //CASE THEN END 条件排序
+                    
+                    $orderby = ' ORDER BY ' . $where['orderby'];
+                    $whereFiled[] = 'CASE';
+                    
+                } else {
+                    
+                    $orders = @explode(',', $where['orderby']);
+                    
+                    $orderby = ' ORDER BY ' . $orders[0] . ' ';
+                    $orderby .= strtoupper(trim($orders[1])) == 'ASC' ? 'ASC' : 'DESC';
+                    
+                    $whereFiled[] = $orders[0];
+                }
+                unset($where['orderby']);
+                
+            }
+            
+            if (!empty($where['orderbyfield'])) {
+                
+                if (is_array($where['orderbyfield']) && count($where['orderbyfield']) == 2) {
+                    
+                    $orderby = ' ORDER BY field(' . $where['orderbyfield'][0] . ',' . $where['orderbyfield'][1] . ')';
+                    
+                    $whereFiled[] = $where['orderbyfield'][0];
+                    
+                }
+                
+                unset($where['orderbyfield']);
+            }
+            
+            $groupby = $having = '';
+            
+            if (!empty($where['groupby'])) {
+                
+                //   GROUP BY    和   HAVING 联合查询
+                //   $key    :   having ;    $value  :   array();
+                //   例如            :     array('having' => array('distance' => array('<', 20, ''), 'x' => array('<>', 0, 'AND')))
+                if (!empty($where['having'])) {
+                    
+                    $groupby = ' GROUP  BY ' . $where['groupby'];
+                    
+                    $whereFiled[] = $where['groupby'];
+                    
+                    foreach ($where['having'] as $key => $value) {
+                        
+                        if (is_array($value)) {
+                            
+                            //   HAVING 多条件查询; $value[2] : 异或查询
+                            if ($value[2] == 'OR' || $value[2] == 'or') {
+                                
+                                $btnAndOR = ' OR ';
+                            } else if ($value[2] == 'AND' || $value[2] == 'and') {
+                                
+                                $btnAndOR = ' AND ';
+                            } else {
+                                
+                                $btnAndOR = '';
+                            }
+                            
+                            $having = $btnAndOR;
+                            $having .= $this->spilceWhere($key, $value);
+                            
+                            $whereFiled[] = $key;
+                        }
+                        
+                    }
+                    
+                    $groupby .= ' HAVING ' . $having;
+                    
+                    unset($where['having']);
+                    
+                } else {
+                    
+                    $groupby = ' GROUP  BY ' . $where['groupby'];
+                    
+                    $whereFiled[] = $where['groupby'];
+                }
+                
+                unset($where['groupby']);
+                
+            }
+            
+            foreach ($where as $key => $value) {
+                
+                //PHPYUNBTWSTART_A  PHPYUNBTWEND_A  PHPYUNBTWSTART_B  PHPYUNBTWEND_B 这种可以组成多个()
+                // PHPYUNBTWSTART_A_DOUBLE、PHPYUNBTWEND_B_DOUBLE 考虑有需要多重括号的方式,增加此种写法
+                //考虑到部分需要使用()执行优先级条件查询判断的情况
+                if (strpos($key, 'PHPYUNBTWSTART') !== FALSE) {
+                    
+                    if ($whereNew != '') {
+                        $btwAndOr = ($value == 'OR' || $value == 'or') ? ' OR ' : ' AND ';
+                    } else {
+                        $btwAndOr = '';
+                    }
+                    
+                    $whereNew .= $btwAndOr . '(';
+                    // 带_DOUBLE为需要一个多的开始括号情况
+                    if (strpos($key, '_DOUBLE') !== FALSE) {
+                        $whereNew .= '(';
+                    }
+                    //标识符 用于判断是否是()内首项条件 非首项条件 必须使用 AND/OR 连接
+                    $btwStr = 1;
+                    
+                } elseif (strpos($key, 'PHPYUNBTWEND') !== FALSE) {
+                    
+                    $whereNew .= ')';
+                    // 带_DOUBLE为需要一个多的结束括号情况
+                    if (strpos($key, '_DOUBLE') !== FALSE) {
+                        $whereNew .= ')';
+                    }
+                    //取消标识符
+                    $btwStr = 0;
+                    
+                } else {
+                    
+                    //where格式不为纯字符串,则按照操作符函数进行处理
+                    if (!empty($value) && is_array($value)) {
+                        
+                        //同一个字段 多项条件组合
+                        if (is_array($value[0])) {
+                            
+                            foreach ($value as $sonv) {
+                                
+                                if ($whereNew != '' && $btwStr != 1) {
+                                    
+                                    $whereNew .= ($sonv[2] == 'OR' || $sonv[2] == 'or') ? ' OR ' : ' AND ';
+                                }
+                                //根据value[0] 判断SQL操作符 并进行组合SQL语句
+                                
+                                $whereNew .= $this->spilceWhere($key, $sonv);
+                                
+                                $whereFiled[] = $key;
+                                
+                                $btwStr = 0;
+                                
+                            }
+                            
+                        } else {
+                            if ($whereNew != '' && $btwStr != 1) {
+                                $whereNew .= (isset($value[2]) && ($value[2] == 'OR' || $value[2] == 'or')) ? ' OR ' : ' AND ';
+                            }
+                            //根据value[0] 判断SQL操作符 并进行组合SQL语句
+                            
+                            $whereNew .= $this->spilceWhere($key, $value);
+                            
+                            $whereFiled[] = $key;
+                        }
+                        
+                    } else {
+                        
+                        //首项条件 排除AND连接符
+                        
+                        if ($whereNew != '' && $btwStr != 1) {
+                            $whereNew .= ' AND ';
+                        }
+                        //纯字符串格式默认为 = 操作符
+                        $whereNew .= "`" . $key . "`='" . $this->db->escape_string($value) . "'";
+                        
+                        $whereFiled[] = $key;
+                    }
+                    $btwStr = 0;
+                }
+            }
+        }
+        // 验证字段
+        
+        if (!empty($whereFiled)) {
+            foreach ($whereFiled as $value) {
+                
+                if (!preg_match("/^[a-zA-Z0-9_`()]{1,30}$/", $value)) {
+                    
+                    $noFields = 1;
+                    break;
+                }
+            }
+        }
+        
+        if (!isset($noFields)) {
+            
+            
+            if ($whereNew) {
+                $whereNew = ' WHERE ' . $whereNew;
+                
+            }
+            $whereNew .= $groupby . $orderby . $limit;
+            return $whereNew;
+        } else {
+            
+            $this->db->show_error();
+        }
+        
+        
+    }
+    
+    function spilceWhere($daraKey, $dataV) {
+        
+        $Operator = array('=', '>', '>=', '<', '<=', '<>', 'in', 'notin', 'isnull', 'notnull', 'like', 'findin', 'between', 'unixtime', 'like%', 'dateformat', 'in_s', 'regexp');
+        
+        if (in_array($dataV[0], $Operator)) {
+            
+            switch ($dataV[0]) {
+                
+                case    'notin'        :
+                    $sqlString = "`$daraKey` not in (" . $this->db->escape_string($dataV[1]) . ")";
+                    break;
+                
+                case    'in'        :
+                    $sqlString = "`$daraKey`  in (" . $dataV[1] . ")";
+                    break;
+                
+                case    'isnull'    :
+                    $sqlString = "`$daraKey` is null";
+                    break;
+                
+                case    'notnull'    :
+                    $sqlString = "`$daraKey` is not null";
+                    break;
+                
+                case    'like'        :
+                    $sqlString = "`$daraKey` LIKE ('%" . $this->db->escape_string($dataV[1]) . "%')";
+                    break;
+                
+                case    'findin'    :
+                    $sqlString = "FIND_IN_SET('" . $this->db->escape_string($dataV[1]) . "',`$daraKey`)";
+                    break;
+                
+                case    'between'    :
+                    $betweens = explode(',', $dataV[1]);
+                    $sqlString = "$daraKey between $betweens[0] AND $betweens[1]";
+                    break;
+                
+                case    'unixtime'  :
+                    $sqlString = "UNIX_TIMESTAMP(`$daraKey`) " . $this->db->escape_string($dataV[1]) . " '$dataV[2]'";
+                    break;
+                
+                case    'like%'        :
+                    $sqlString = "`$daraKey` LIKE ('" . $this->db->escape_string($dataV[1]) . "%')";
+                    break;
+                
+                case    'dateformat':
+                    $sqlString = "date_format(`$daraKey`,'" . $dataV[1] . "')=date_format(now(),'" . $this->db->escape_string($dataV[1]) . "')";
+                    break;
+                // 字符串型的in
+                case    'in_s'        :
+                    $sqlString = "`$daraKey`  in ('" . $dataV[1] . "')";
+                    break;
+                // 处理值匹配
+                case    'regexp'    :
+                    $sqlString = "(`$daraKey` REGEXP '" . $dataV[1] . "')=0";
+                    break;
+                default                :
+                    // 传入字段中包含sql函数的,两边不需要加`
+                    $keystr = !preg_match("/[)]/", $daraKey) ? "`$daraKey` " : "$daraKey ";
+                    $sqlString = $keystr . $this->db->escape_string($dataV[0]) . " '$dataV[1]'";
+            }
+            
+        } else {
+            
+            $this->db->show_error();
+        }
+        
+        return $sqlString;
+        
+    }
+    
+    function uc_open() {
+        include APP_PATH . 'data/api/uc/config.inc.php';
+        include APP_PATH . '/api/uc/include/db_mysql.class.php';
+        include APP_PATH . '/api/uc/uc_client/client.php';
+        
+        return $ucinfo;
+    }
 }
+
 ?>
\ No newline at end of file

--
Gitblit v1.9.0