objdb = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWD)) { switch ($this->geterrno()) { case 2005: exit("连接数据库失败,数据库地址错误或者数据库服务器不可用"); break; case 2003: exit("连接数据库失败,数据库端口错误"); break; case 2006: exit("连接数据库失败,数据库服务器不可用"); break; case 1045: exit("连接数据库失败,数据库用户名或密码错误"); break; default : exit("连接数据库失败,请检查数据库信息。错误编号:" . $this->geterrno()); break; } } if ($this->getMysqlVersion() > '4.1') { mysqli_query($this->objdb,"SET NAMES 'utf8'"); } @mysqli_select_db($this->objdb,DB_NAME) OR exit("连接数据库失败,未找到您填写的数据库"); } //静态公共接口 public static function getInstance(){ if(!(self::$link instanceof self)){ self::$link = new self(); } return self::$link; } /** * 获取mysql错误 */ function geterror() { return mysqli_error($this->objdb); } /** * 取得数据库版本信息 */ function getMysqlVersion() { return mysqli_get_server_info($this->objdb); } /** * 获取mysql错误编码 */ function geterrno() { return mysqli_connect_errno($this->objdb); } //返回数据库实例对象 public static function table($table_name,$val=FALSE){ $link = self::getInstance(); if(!defined('DB_PRE') or DB_PRE == ''){ if($val){ $link->table_name = "`$table_name` $val"; }else{ $link->table_name = "`$table_name`"; } }else{ if($val){ $link->table_name = "`".DB_PRE."$table_name` $val"; }else{ $link->table_name = "`".DB_PRE."$table_name`"; } } return $link; } //field:格式->('id,name,time......') public function field($field){ $this->options['field'] = $field; return $this; } //处理field数据,组sql public function deal_field($field){ $field = $field['field']; return $field; } //设置where条件(数组和多个where都可以),where('id',12) 或者 where([id=>12]) public function where($key,$factor=null,$val=null){ if($key != null && $factor != null && is_array($val)){//属于三者都有的情况,中间的参数就是条件 if(is_string($key) && is_string($factor)){ $v_str = "`$key` $factor "; }else{ die("failed: ".'不合法'); } $count_val = count($val); $nums = 1; $str = ''; foreach($val as $k=>$v){ if($count_val == $nums){ $str .= "'$v'"; }else{ $str .= "'$v'".' '.'and'.' '; } $nums++; } $nums = 1; $v_str = $v_str.$str; }elseif($key != null && $factor != null && $val != null && !is_array($val)){ $v = (string)$val; if(is_string($key) && is_string($factor) && is_string($v)){ if($factor == 'in'){ $v_str = "$key $factor $val"; }else{ $v_str = "$key $factor '$val'"; } }elseif(is_array($key) && is_string($factor) && is_string($val)){ $count_key = count($key); $nums = 1; $str = ''; foreach($key as $k=>$v){ if($count_key == $nums){ $str .= "$k ='$v'"; }else{ $str .= "$k ='$v'".' '.'and'.' '; } $nums++; } $nums = 1; $v_str = $factor.$str.$val; }else{ die("failed: ".'不合法'); } }else{//两个或者一个参数的情况 $v = (string)$val; $val = (string)$factor;//此种情况将第二参数传给第三个参数 if(is_string($key) && !is_array($key)){//为字符串 $v_str = "$key = '$val'"; }else if(is_array($key)){ $count_key = count($key); $nums = 1; $str = ''; foreach($key as $k=>$v){ if($count_key == $nums){ $str .= "$k ='$v'"; }else{ $str .= "$k ='$v'".' '.'and'.' '; } $nums++; } $nums = 1; $v_str = $str; }else{ die("failed: ".'不合法'); } } $this->options['where'][] = $v_str; return $this; } //处理where数据,组sql public function deal_where($where){ $arr = $where['where']; $count_key = count($arr); $nums = 1; $str = ''; foreach($arr as $key=>$val){ if($count_key == $nums){ $str .= $val; }else{ $str .= $val.' '.'and'.' '; } $nums++; } $nums = 1; return 'where '.$str; } //设置orwhere条件(数组和多个where都可以),where('id',12) 或者 where([id=>12]) public function whereOr($key,$factor='',$val=''){ $v = (string)$val; if($key != '' && $factor != '' && $v != ''){//属于三者都有的情况,中间的参数就是条件 if(is_string($key) && is_string($factor) && is_string($v)){ $v_str = "$key $factor '$val'"; }elseif(is_array($key) && is_string($factor) && is_string($v)){ $count_key = count($key); $nums = 1; $str = ''; foreach($key as $k=>$v){ if($count_key == $nums){ $str .= "$k = '$v'"; }else{ $str .= "$k = '$v'".' '.'or'.' '; } $nums++; } $nums = 1; $v_str = $factor.$str.$val; }else{ die("failed: ".'不合法'); } }else{//两个或者一个参数的情况 $val = (string)$factor;//此种情况将第二参数传给第三个参数 if(is_string($key) && !is_array($key)){//为字符串 $v_str = "$key ='$val'"; }else if(is_array($key) && !empty($val)){ $count_key = count($key); $nums = 1; $str = ''; foreach($key as $k=>$v){ if($count_key == $nums){ $str .= "$k = '$v'"; }else{ $str .= "$k = '$v'".' '.'or'.' '; } $nums++; } $nums = 1; $v_str = $str.$val; }else if(is_array($key) && empty($val)){ $count_key = count($key); $nums = 1; $str = ''; foreach($key as $k=>$v){ if($count_key == $nums){ $str .= "$k = '$v'"; }else{ $str .= "$k = '$v'".' '.'or'.' '; } $nums++; } $nums = 1; $v_str = $str; }else{ die("failed: ".'不合法'); } } $this->options['whereOr'][] = $v_str; return $this; } //处理orwhere数据,组sql public function deal_whereOr($whereOr){ $arr = $whereOr['whereOr']; $count_key = count($arr); $nums = 1; $str = ''; foreach($arr as $key=>$val){ if($count_key == $nums){ $str .= $val; }else{ $str .= $val.' '.'or'.' '; } $nums++; } $nums = 1; return 'or '.$str; } //设置JOIN条件(数组和多个JOIN都可以),JOIN('id',12) 或者 JOIN([id=>12]) public function join($key=null,$factor='',$val=''){ $v = (string)$val; if($key != '' && $factor != '' && $v != ''){//属于三者都有的情况,中间的参数就是条件 if(is_string($key) && is_string($factor) && is_string($v)){ if(!defined('DB_PRE') or DB_PRE == ''){ $v_str = "`$key` $factor ON ($val)"; }else{ $v_str = "`".DB_PRE."$key` $factor ON ($val)"; } }else{ die("failed: ".'不合法'); } }else{//两个或者一个参数的情况 $val = (string)$factor;//此种情况将第二参数传给第三个参数 if(is_string($key) && !is_array($key) && $val != '' ){ if (strpos($key, " ")){ $v_str = "$key ON ($val)"; }else{ if(!defined('DB_PRE') or DB_PRE == ''){ $v_str = "`$key` ON ($val)"; }else{ $v_str = "`".DB_PRE."$key` ON ($val)"; } } }elseif(is_string($key) && !is_array($key) && $val == '' ){ $v_str = "$key "; }else if(is_array($key)){ $count_key = count($key); $nums = 1; $str = ''; foreach($key as $k=>$v){ if($count_key == $nums){ if(!defined('DB_PRE') or DB_PRE == ''){ $str .= "`$k` ON ($v)"; }else{ $str .= "`".DB_PRE."$k` ON ($v)"; } }else{ if(!defined('DB_PRE') or DB_PRE == ''){ $str .= "`$k` ON ($v)".' '.'LEFT JOIN'.' '; }else{ $str .= "`".DB_PRE."$k` ON ($v)".' '.'LEFT JOIN'.' '; } } $nums++; } $nums = 1; $v_str = $str; }else{ $v_str = ''; } } $this->options['join'][] = $v_str; return $this; } //处理JOIN数据,组sql public function deal_join($join){ $arr = $join['join']; $count_key = count($arr); $nums = 1; $str = ''; foreach($arr as $key=>$val){ if($count_key == $nums){ $str .= $val; }else{ $str .= $val.' '.'LEFT JOIN'.' '; } $nums++; } $nums = 1; return 'LEFT JOIN '.$str; } //追加sql原生语句 public function addto($val){ $v_str = (string)$val; $this->options['addto'][] = $v_str; return $this; } //处理原生数据,组sql public function deal_addto($addto){ $arr = $addto['addto']; $count_key = count($arr); $nums = 1; $str = ''; foreach($arr as $key=>$val){ if($count_key == $nums){ $str .= $val; }else{ $str .= $val.' '; } $nums++; } $nums = 1; return $str; } //设置排序 格式->('id desc,time aes') //ORDER BY ticketnum_id desc,project_id desc public function order($order){ $this->options['order'] = $order; return $this; } //处理order数据,租sql public function deal_order($order){ $order = $order['order']; return 'ORDER BY '.$order; } //设置分页查询、格式->('0,10') public function limit($limit,$nums=''){ if((string)$nums == '' && (string)$limit != ''){ $this->options['limit'] = '0'.','.(string)$limit; }else{ $this->options['limit'] = (string)$limit.','.(string)$nums; } return $this; } //处理limit数据,租sql public function deal_limit($limit){ $limit = $limit['limit']; return 'limit '.$limit; } //判断表存在否 public function exist($true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $sql = 'SELECT * from '.$table; if($true == false){return $sql;}//输出sql return $this->query_exist($link,$sql); } //判断表存在否sql操作 public function query_exist($link,$sql){ $result = mysqli_query($link,$sql); if($result){ return true; }else{ return false; } } //查找单条 public function find($true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $field = isset($array['field'])?$array['field']:'*'; $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.$field.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_find($link,$sql); } //查找单条数据sql操作 public function query_find($link,$sql){ $result = mysqli_query($link,$sql); if($result){ $arr = []; if($result && mysqli_num_rows($result)>0){ $arr = mysqli_fetch_assoc($result); } }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } //$this->close_db($link); return isset($arr)?$arr:false; } //查询多条 public function select($true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $field = isset($array['field'])?$array['field']:'*'; $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.$field.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_select($link,$sql); } //查找多条数据sql操作 public function query_select($link,$sql){ $result = mysqli_query($link,$sql); $arr = []; if($result && mysqli_num_rows($result)>0){ while($row=mysqli_fetch_assoc($result)){ $arr[] = $row; } }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } //$this->close_db($link); return $arr; } //聚合查询-count public function count($true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.'count(*)'.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_count($link,$sql); } //聚合查询-count sql操作 public function query_count($link,$sql){ $result = mysqli_query($link,$sql); if($result){ $count_json = mysqli_fetch_assoc($result); $count = $count_json['count(*)']; }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } return (int)$count; } //聚合查询-max public function max($max,$true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.'max('.$max.')'.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_max($link,$sql,$max); } //聚合查询-max sql操作 public function query_max($link,$sql){ $result = mysqli_query($link,$sql); if($result){ $count_json = mysqli_fetch_assoc($result); $str_arr = explode(' ', $sql); $key_str = $str_arr[1]; $count = $count_json[$key_str]; }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } return (int)$count; } //聚合查询-min public function min($min,$true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.'min('.$min.')'.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_min($link,$sql,$min); } //聚合查询-min sql操作 public function query_min($link,$sql){ $result = mysqli_query($link,$sql); if($result){ $count_json = mysqli_fetch_assoc($result); $str_arr = explode(' ', $sql); $key_str = $str_arr[1]; $count = $count_json[$key_str]; }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } return (int)$count; } //聚合查询-sum public function sum($sum,$true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.'sum('.$sum.')'.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_sum($link,$sql,$sum); } //聚合查询-sum sql操作 public function query_sum($link,$sql){ $result = mysqli_query($link,$sql); if($result){ $count_json = mysqli_fetch_assoc($result); $str_arr = explode(' ', $sql); $key_str = $str_arr[1]; $count = $count_json[$key_str]; }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } return (int)$count; } //聚合查询-avg public function avg($avg,$true=true){ $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $make = isset($array['make'])?$array['make']:''; $sql = 'SELECT '.'avg('.$avg.')'.' from '.$table.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_avg($link,$sql,$avg); } //聚合查询-avg sql操作 public function query_avg($link,$sql){ $result = mysqli_query($link,$sql); if($result){ $count_json = mysqli_fetch_assoc($result); $str_arr = explode(' ', $sql); $key_str = $str_arr[1]; $count = $count_json[$key_str]; }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); } return (int)$count; } //处理options,组成sql语句(公共函数) public function do_sql(){ $array = $this->options; if(empty($array)){ return []; } $this->options = [];//清除记录 $data = []; $stra = ''; $strb = ''; foreach ($array as $key => $val) { $deal_something = 'deal_'.$key; if($key == 'field'){ $stra .= $this->$deal_something($array).' '; $data['field'] = $stra; }else{ $strb .= $this->$deal_something($array).' '; $data['make'] = $strb; } } return $data; } //添加插入数据 $add:数组(['xxx'=>'xxx','xxxx'=>'xxxx']) public function add($add,$true=true){ if(!is_array($add)){ return false; } $data = $this->deal_add($add); $link = self::getInstance()->objdb; $table = $this->table_name; $sql = 'INSERT INTO '.$table.' '.$data['key'].' VALUES '.$data['val']; if($true == false){return $sql;}//输出sql return $this->query_add($link,$sql); } //添加插入数据 sql操作 public function query_add($link,$sql){ $result = mysqli_query($link,$sql); if($result && mysqli_affected_rows($link)>0){ $res = mysqli_insert_id($link); //$this->close_db($link); return $res; }elseif(APP_DEBUG==1){ exit("SQL:$sql
错误:" . $this->geterror()); }else{ return false; } } //处理add的数据,租sql public function deal_add($add){ $nums = 1; $counts = count($add); $stra = ''; $strb = ''; foreach($add as $key=>$val){ if($nums == 1){ $stra .= '(`'.(string)$key.'`'; $strb .= '('.(string)"'$val'"; }elseif($nums == $counts){ $stra .= ',`'.(string)$key.'`)'; $strb .= ','.(string)"'$val'".')'; }else{ $stra .= ',`'.(string)$key.'`'; $strb .= ','.(string)"'$val'"; } $nums++; } $data['key'] = $stra; $data['val'] = $strb; return $data; } //更新操作 格式( ['name'=>'王天佑',time=>'1234567890'] ) public function update($data,$true=true){ if(!is_array($data)){ return false; } $data = $this->deal_update($data); $link = self::getInstance()->objdb; $table = $this->table_name; $array = $this->do_sql(); $make = isset($array['make'])?$array['make']:''; $sql = 'UPDATE '.$table.' SET '.$data.' '.$make; if($true == false){return $sql;}//输出sql return $this->query_update($link,$sql); } //更新操作 sql操作 public function query_update($link,$sql){ $result = mysqli_query($link,$sql); $effet = mysqli_affected_rows($link); if($result && $effet>0){ $res = $effet; //$this->close_db($link); return $res; }elseif(APP_DEBUG==1 && !$result){ exit("SQL:$sql
错误:" . $this->geterror()); }else{ return false; } } //处理更新数据,组sql 格式['aaaa'=>'aaaa','bbbb'=>'bbbb'] public function deal_update($data){ $nums = 1; $counts = count($data); $str = ''; foreach($data as $key=>$val){ if($nums == $counts){ $str .= $key.' = '.(string)"'$val'"; }else{ $str .= $key.' = '.(string)"'$val'".' , '; } $nums++; } return $str; } //删除函操作 格式( ['name'=>'王天佑',time=>'1234567890'] ) public function del($true=true){ $data = $this->deal_del(); $link = self::getInstance()->objdb; $table = $this->table_name; $sql = 'DELETE FROM '.$table.' '.$data; if($true == false){return $sql;}//输出sql return $this->query_del($link,$sql); } //删除函操作 sql操作 public function query_del($link,$sql){ $res = mysqli_query($link,$sql); $effet = mysqli_affected_rows($link); if($res){ //$this->close_db($link); return $effet; }elseif(APP_DEBUG == 1 && !$res){ exit("SQL:$sql
错误:" . $this->geterror()); }else{ return false; } } //处理删除函数 public function deal_del(){ $array = $this->options; if(empty($array)){ return ''; } $res = $this->deal_where($array); return $res; } //原生sql操作 public static function query($sql){ $obj = self::getInstance(); $link = $obj->objdb; $str_arr = explode(' ', $sql); $data = ['INSERT'=>'query_add','DELETE'=>'query_del','UPDATE'=>'query_update','SELECT'=>['count('=>'query_count','max('=>'query_max','min('=>'query_min','sum('=>'query_sum','avg('=>'query_avg']]; $func_name = ''; $a = strtoupper($str_arr[0]); $b = strtolower($str_arr[1]); foreach($data as $key=>$val){ if($key == $a){ if(is_string($val)){//属于增删改 $func_name = $val;break; }else if(is_array($val)){//属于查 foreach($val as $k=>$v){ if(strpos($b,$k) === 0){ $func_name = $v;break; }else{ $func_name = 'query_select'; } } } } } if($func_name === ''){//sql不合法 die("sql: ".'不合法'); }else{ return $obj->$func_name($link,$sql); } } //数据库安装 public static function establish($sql){ $link = self::getInstance()->objdb; return mysqli_query($link,$sql); } //关闭连接 public function close_db($link){ mysqli_close($link); } }