在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
<?php include 'config.php'; class Model{ //用户名 protected $user; //密码 protected $pwd; //主机 protected $host; //库名,是一个数组 protected $dbName=array(); //字符集 protected $charset='utf8'; //连接资源是一个数组 protected $_link=array(); //通用表名 protected $tabName; //真实表名 protected $trueTabName; //表前缀 protected $prefix; //字段缓存 protected $fields; //创建表的sql语句 protected $createSql='CREATE TABLE IF NOT EXISTS __TABLENAME__( `id` mediumint(9) NOT NULL AUTO_INCREMENT, `username` char(15) NOT NULL, `password` char(32) NOT NULL, `createtime` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;'; //1,通过ID取余,得到真实表名 mod //2,用户名截取前几位 substr //3,md5 md5 //4,不带分库分表 none protected $partition=array( 'type'=>'md5', 'rule'=>1, ); public function __construct($tabName=''){ $this->user=DB_USER; $this->host=DB_HOST; $this->dbName[0]=DB_NAME; $this->charset=DB_CHARSET; $this->prefix=DB_PREFIX; $this->pwd=DB_PWD; if(empty($tabName)){ //userModel //newModel $this->tabName=$this->prefix.ucfirst(strtolower(substr(get_class($this),0,-5))); }else{ $this->tabName=$this->prefix.$tabName; } $this->_link[0]=$this->connect($this->host,$this->user,$this->pwd,$this->dbName,$this->charset); } public function connect($host,$user,$pwd,$dbName,$charset,$linkId=0){ $conn=mysql_connect($host,$user,$pwd); if(mysql_errno()){ $this->error(-1,$conn); return false; } if(!$this->selectDb($dbName[$linkId],$conn)){ $this->error(-2,$conn); return false; } if(!$this->setCharset($charset,$conn)){ $this->error(-3,$conn); return false; } return $conn; } public function selectDb($dbName,$conn){ if(mysql_select_db($dbName,$conn)){ return true; }else{ return false; } } public function setCharset($charset,$conn){ if(mysql_set_charset($charset,$conn)){ return true; }else{ return false; } } public function addServer($host,$user,$pwd,$dbName,$charset,$linkId){ $this->dbName[$linkId]=$dbName; $this->_link[$linkId]=$this->connect($host,$user,$pwd,$dbName,$charset,$linkId); } public function getTrueTable($content,$linkId=0){ switch($this->partition['type']){ case 'mod': if(!is_int($content)){ $this->error(-4); return false; } $string=$content%$this->partition['rule']; break; case 'substr': $string=substr($content,0,$this->partition['rule']); break; case 'md5': $string=substr(md5($content),0,$this->partition['rule']); break; case 'none': $string=null; break; } if(empty($string)){ $this->trueTableName=$this->tabName; }else{ $this->trueTableName=$this->tabName.'_'.$string; } //第一,判断表是否存在,存在返回表字段缓存 //第二,不存在,则创建表,返回字段缓存 $this->existsTable($this->trueTableName,$linkId); } //表是否存在 //是否缓存了字段 protected function existsTable($tableName,$linkId=0){ $database=$this->dbName[$linkId]; $sql='select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` where `TABLE_SCHEMA`=\''.$database.'\' and `TABLE_NAME`=\''.$tableName.'\''; if($this->execute($sql,$linkId)){ //表存在 if(file_exists('cache/'.md5($this->tabName).'.php')){ $this->fields=include 'cache/'.md5($this->tabName).'.php'; }else{ //暂时留着不写,待会来写 $this->fields=$this->getFieldCache($linkId); } }else{ //表不存在 $this->createTable($this->trueTableName,$linkId); $this->fields=$this->getFieldCache($linkId); } } protected function getFieldCache($linkId=0){ if(file_exists('cache/'.md5($this->tabName).'.php')){ $fields=include 'cache/'.md5($this->tabName).'.php'; return $fields; } $sql="desc $this->trueTableName"; $f=$this->query($sql,$linkId); $fields=$this->writeFields($f); return $fields; } protected function writeFields($f){ foreach($f as $key=>$value){ $fields[]=$value['Field']; if($value['Key']=='PRI'){ $fields['_pk']=$value['Field']; } if($value['Extra']=='auto_increment'){ $fields['_auto']=$value['Field']; } } $string="<?php \n return ".var_export($fields,true)."\n?>"; file_put_contents('cache/'.md5($this->tabName).'.php',$string); return $fields; } protected function createTable($tabName,$linkId=0){ $sql=str_replace('__TABLENAME__',$tabName,$this->createSql); $this->execute($sql,$linkId); } //不需要返回结果集我用execute方法 public function execute($sql,$linkId=0){ $conn=$this->_link[$linkId]; $result=mysql_query($sql,$this->_link[$linkId]); if($result&&mysql_affected_rows()){ return mysql_affected_rows(); }else{ return false; } } //需要返回结果集我用query方法 public function query($sql,$linkId=0){ $result=mysql_query($sql,$this->_link[$linkId]); if($result&&mysql_affected_rows()){ while($row=mysql_fetch_assoc($result)){ $rows[]=$row; } }else{ return false; } return $rows; } public function error($num,$conn){ switch($num){ case -1: $string='连接数据库服务器失败'.mysql_error($conn); break; case -2: $string='选择数据失败'; break; case -3: $string='设置字符集失败'; break; case -4: $string='数据库路由时选择的是取余,传入的不是整型'; break; } } //查最大值 public function max($field,$linkId=0){ if(!in_array($field,$this->fields)){ return false; } $sql="select max($field) as re from $this->trueTableName"; $result=$this->query($sql,$linkId); $row=$result['re']; return $row; } //查最小值 public function min($field,$linkId=0){ if(!in_array($field,$this->fields)){ return false; } $sql="select min($field) as re from $this->trueTableName"; $result=$this->query($sql,$linkId); $row=$result['re']; return $row; } //求和 public function sum($field,$linkId=0){ if(!in_array($field,$this->fields)){ return false; } $sql="select sum($field) as re from $this->trueTableName"; $result=$this->query($sql,$linkId); $row=$result['re']; return $row; } //最平均数 public function avg($field,$linkId=0){ if(!in_array($field,$this->fields)){ return false; } $sql="select avg($field) as re from $this->trueTableName"; $result=$this->query($sql,$linkId); $row=$result['re']; return $row; } //求总数 public function count($field='',$linkId=0){ if(empty($field)){ $field=$this->fields['_pk']; } $sql="select count($field) as re from $this->trueTableName"; $result=$this->query($sql,$linkId); $row=$result['re']; return $row; } // //删除 public function delete($data,$where='',$linkId=0,$order='',$limit=''){ //delete from 表 where 字段 order by 字段 limit if(is_array($data)){ $value=join(',',$data); }else{ $value=(int)$data; } $fields=$this->fields['_pk']; if(empty($where)){ $sql="delete from $this->trueTableName where $fields in ($value)"; }else{ $where='where '.$where; if(!empty($order)){ $order='order by '.$order; } if(!empty($limit)){ $limit='limit '.$limit; } $sql="delete from $this->trueTableName $where $order $limit"; } return $this->execute($sql,$linkId); } // //修改 public function save($data,$where,$linkId=0,$order='',$limit=''){ //update 表 set 字段=值,字段=值 where 条件 order limit $key=array_keys($data); $newKey=array_intersect($key,$this->fields); foreach($data as $key=>$value){ if(!in_array($key,$newKey)) continue; $update.=$key.'="'.$value.'",'; } $update=rtrim($update,','); if(!empty($order)){ $order='order by '.$order; } if(!empty($limit)){ $limit='limit '.$limit; } if(!empty($where)){ $where='where '.$where; } $sql="update $this->trueTableName set $update $where $order $limit"; echo $sql; $result=$this->execute($sql,$linkId); return $result; } //增加 public function add($data,$linkId=0){ //insert into 表(字段) values(值) $key=array_keys($data); $newKey=array_intersect($key,$this->fields); foreach($data as $key=>$value){ if(!in_array($key,$newKey)) continue; $values.="'".$value."',"; } $values=trim($values,','); $fields=join(',',$newKey); $sql="insert into $this->trueTableName($fields) values($values)"; echo $sql; $result=$this->execute($sql,$linkId); return $result; } //单条查询 public function find($linkId=0,$where='',$order=''){ //select * from 表 where order limit 1 $field=join(',',$this->fields); if(!empty($where)){ $where='where '.$where; } if(!empty($order)){ $order='order by '.$order; } $sql="select $field from $this->trueTableName $where $order limit 1"; $result=$this->query($sql,$linkId); return $result[0]; } //多条查询 public function select($field='',$linkId=0,$where='',$order='',$limit=''){ //select * from 表 where order limit if(empty($field)){ $fields=join(',',$this->fields); }else{ if(is_array($field)){ $newKey=array_intersect($field,$this->fields); $fields=implode(',',$newKey); }else{ $fields=$field; } } if(!empty($where)){ $where='where '.$where; } if(!empty($order)){ $order='order by '.$order; } if(!empty($limit)){ $limit='limit '.$limit; } $sql="select $fields from $this->trueTableName $where $order $limit"; $result=$this->query($sql,$linkId); return $result; } //按照字段来查询数据 function __call($name,$param){ $key=substr($name,0,5); if(strtolower($key)=='getby'){ $field=strtolower(substr($name,5)); if(!in_array($field,$this->fields)){ return false; } $f=join(',',$this->fields); $value=$param[0]; $sql="select $f from $this->trueTableName where $field='$value'"; $result=$this->query($sql); return $result[0]; } } } ?>
|
2022-08-17
2022-11-06
2022-08-17
2022-07-18
2022-07-29
请发表评论