From a34a90f03cecc7658231547270f8036bb5affe4a Mon Sep 17 00:00:00 2001 From: chengkun <chengkun@ishangstudy.com> Date: Tue, 29 Apr 2025 18:32:24 +0800 Subject: [PATCH] 提交 --- app/public/action.class.php | 2318 ++++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,178 insertions(+), 1,140 deletions(-) diff --git a/app/public/action.class.php b/app/public/action.class.php index 6e65815..4876c36 100644 --- a/app/public/action.class.php +++ b/app/public/action.class.php @@ -1,118 +1,110 @@ <?php -/* -* $Author :PHPYUN开发团队 -* -* 官网: http://www.phpyun.com -* -* 版权所有 2009-2021 宿迁鑫潮信息技术有限公司,并保留所有权利。 -* -* 软件声明:未经授权前提下,不得用于商业运营、二次开发以及任何形式的再次发布。 - */ -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 +112,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 +124,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 +136,7 @@ public function __isset($name) { return isset($this->data[$name]); } - + /** * 销毁数据对象的值 * @access public @@ -154,403 +146,441 @@ 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 get_table_fields($tableName) { + include(CONFIG_PATH . 'db.config.php'); + $mysqli = new mysqli($db_config['dbhost'], $db_config['dbuser'], $db_config['dbpass'], $db_config['dbname']); + $query = $mysqli->query("SHOW COLUMNS FROM $tableName"); + $tableFields = array(); + while ($row = $query->fetch_assoc()) { + $tableFields[] = $row['Field']; + } + return $tableFields; + } + + + function insert_into($table, $data = array()) { + $value = array(); + $this->db->connect(); + include(PLUS_PATH . 'dbstruct.cache.php'); + $TableFullName = $this->def . $table; + $fields = $this->get_table_fields($TableFullName); + if (!$fields) { + return FALSE; + } + if (!is_array($data)) { + return FALSE; + } + foreach ($data as $key => $v) { + if (in_array($key, $fields)) { + $v = $this->FilterStr($v); + $value[] = "`" . $key . "`='" . $this->db->escape_string($v) . "'"; + } + } + + $value = @implode(",", $value); + if (!$value) { + return FALSE; + } + 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; + $fields = $this->get_table_fields($TableFullName); + if (!is_array($data) || !is_array($where)) { + return FALSE; + } + if (!$fields) { + return FALSE; + } + + // var_dump($$TableFullName);exit(); +// if (is_array($where)) { +// $fields = array_keys($where); +// } else { +// return FALSE; +// } +// var_dump($fields);exit(); + + + foreach ($data as $key => $v) { + if (!in_array($key, $fields)) { + continue; + } + 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 (!isset($$TableFullName)) { + $this->error = '表结构缓存文件不存在'; + return FALSE; + } + + 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 +589,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 +698,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