| | |
| | | <?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 |
| | |
| | | * @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 |
| | |
| | | * @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 |
| | |
| | | public function __isset($name) { |
| | | return isset($this->data[$name]); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 销毁数据对象的值 |
| | | * @access public |
| | |
| | | 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) . "'"; |
| | | } |
| | | } |
| | |
| | | $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); |
| | | } |
| | | |
| | | /** |
| | | * 删除进入回收站 |
| | | * |
| | |
| | | * @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; |
| | | } |
| | | } |
| | | |
| | | ?> |