首页  >  文章  >  后端开发  >  基于PHP MySQLi扩展的数据库操作Model

基于PHP MySQLi扩展的数据库操作Model

WBOY
WBOY原创
2016-06-20 12:38:571238浏览

<?php/*****************************Model类(使用MySQL扩展访问数据库)******************************/class Model{    private $table;    //数据库链接    private $link;    //最后一次执行的sql语句    private $sql;    private $tableString;    private $fieldString;    private $whereString;    private $orderString;    private $limitString;    //初始化类    public function __construct($tableName){        $dbinfo=array(            'hostname'=>'192.168.1.246',            'username'=>'liuchuan',            'password'=>'liuchuan123',            'database'=>'whatcart'        );        $this->link=new mysqli($dbinfo['hostname'],$dbinfo['username'],$dbinfo['password'],$dbinfo['database']);        if($this->link->connect_errno)            trigger_error('Error:Could not make a database link ('.$this->link->connect_errno.')'.$this->link->connect_errno);        $this->link->set_charset("utf8");        $this->fieldString='*';        $this->tableString=$tableName;        $this->leftJoinString='';        $this->whereString='';        $this->orderString='';        $this->limitString='';    }     /********封装的MySQLI扩展方法********/    //参数过滤,输入参数只能是基本类型或一维数组    public function escape($param){        if(is_array($param)){            foreach ($param as $key => $value) {                $param[$key]=$this->link->real_escape_string($value);            }        }else{            $param=$this->link->real_escape_string($value);        }        return $param;    }    //获取插入后生成的ID    public function getLastId(){        return $this->link->insert_id;    }    //获取影响的行数    public function countAffected(){        return $this->link->affected_rows;    }    //执行SQL命令返回TRUE或FALSE    public function execute($sql){        $this->sql=$sql;        $result=$this->link->real_query($this->sql);        if(false===$result){            trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);            return false;        }else{            $sql=strtolower($this->sql);            return (false===strpos($sql,'insert')?true:$this->link->insert_id;//如果包含insert就返回插入记录的ID        }    }    //执行SQL查询返回关联数组    public function query($sql){        $result=$this->link->real_query($sql);        $this->sql=$sql;        if($result!==false){            $record=array();            $list=array();            while($record=$result->fetch_assoc()){                $list[]=$record;            }            return $list;        }else{            trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);            return false;        }    }    /********单表增删查改********/    public function create($table,$model){        $fields='';        $values='';        foreach ($model as $key => $value) {            if($fields){                $fields.=',';            }            $fields.="`$key`";            if($values){                $values.=',';            }            $values.=is_numeric($value)?$value:"'".$this->link->real_escape_string($value)."'";        }        $this->sql="INSERT INTO `$table`($fields) VALUES($values)";        if(false===$this->link->real_query($this->sql))            trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);        return $this->link->insert_id;    }    public function modify($table,$model,$where){        $assins='';        $where=$this->rewhere($where);        foreach ($model as $key => $value) {            $rkey=$this->link->real_escape_string($key);            $rvalue=$this->link->real_escape_string($value);            if(!is_numeric($rvalue)){                $rvalue="'".$rvalue."'";            }            $assins.=$assins?",`$rkey`=$rvalue":"`$rkey`=$rvalue";        }        $result=$this->link->real_query($this->sql);        if(false===$result)             trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);    }    public function remove($table,$where){        $where=$this->rewhere($where);        $this->sql="DELETE FROM `$table` WHERE $where";        $result=$this->link->real_query($this->sql);        if(false===$result)             trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);        return $flag;    }    public function unique($where){        $where=$this->rewhere($where);        $this->sql="SELECT * FROM `$table` WHERE $where LIMIT 1";        $result=$this->link->real_query($this->sql);        if($result===false)            trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);        return $result -> fetch_object();    }    public function countRow($where){        $where=$this->rewhere($where);        $this->sql=($where=='')?"SELECT COUNT(*) as 'totalRow' FROM `{$this->tableString}`":"SELECT COUNT(*) FROM `{$this->tableString}` WHERE $where";        $result=$this->link->real_query($this->sql);        if($result===false)            trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);        $record=$result->fetch_Object();        return $record->totalRow;    }    //按条件查找函数    public function search($table,$fields,$leftJoin='',$where='',$order='',$limit=''){        if(is_array($fields))            $fields=implode(",",$fields);        $this->sql=empty($fields)?"SELECT * FROM `$table`":"SELECT $fields FROM `$table`";        if(!empty($where)){            $where=$this->rewhere($where);            $this->sql.=" WHERE $where";        }        if(!empty($order))            $this->sql.=" ORDER BY $order";        if(!empty($order))            $this->sql.="LIMIT $limit";        $result=$this->link->real_query($this->sql);        if($result===false){             trigger_error('<br/>ERROR MESSAGE:'.$this->link->error.'<br/>THE SQL:'.$this->sql);        }else{            $tempItem=array();            $tempList=array();            while($tempItem=$result -> fetch_assoc()){                if(!empty($tempItem['create_time']))                    $tempItem['create_time_exp']=date('Y-m-d H:i:s',$tempItem['create_time']);                if(!empty($tempItem['add_time']))                    $tempItem['add_time_exp']=date('Y-m-d H:i:s',$tempItem['end_time']);                if(!empty($tempItem['start_time']))                    $tempItem['start_time_exp']=date('Y-m-d H:i:s',$tempItem['start_time']);                if(!empty($tempItem['end_time']))                    $tempItem['end_time_exp']=date('Y-m-d H:i:s',$tempItem['end_time']);                $tempList[]=$tempItem;            };            return $tempList;        }    }    public function keyIn($ids){        if(!empty($ids)){            return false;        }        if(is_array($ids)){            foreach ($ids as $key => $value) {                $ids[$key]=$this->link->real_escape_string($value);            }            $ids=implode(',',$ids);        }else{            $ids=$this->link->real_escape_string($ids);        }        $primary=$this->getPrimaryKey();        if(!empty($this->whereString))            $this->whereString.=" AND ";        $this->whereString.="`$primary` in ($ids)";        return $this;    }/******************仿ThinkPHP的链式操作*******************************/    //设置查询的字段    public function field($field){        if(is_array($field))            $field=implode(',',$field);        $this->fieldString=$field;        return $this;    }    public function table($table){        $this->tableString=$table;    }    public function order($order){        $this->orderString=$order;    }    public function limit($limit){        $this->limitString=$limit;    }    //将数组格式的条件组装成字符串    public function where($where){        if(is_array($where)&&count($where)>0){            $str='';            foreach($where as $key=>$value){                if(!empty($str)){                    $str.=' AND ';                }                $rekey=$this->link->real_escape_string($key);                $revalue=$this->link->real_escape_string($value);                $str.=is_numeric($revalue)?"`$rekey`=$revalue":"`$rekey`='$revalue'";            }            $this->whereString=$str;        }else{            $this->whereString=$where;        }        return $this;    }    //删除    public function delete(){        if(empty($this->whereString))            trigger_error('<br/>ERROR MESSAGE:删除条件不可以是空');        $this->sql="DELETE FROM {$this->tableString} WHERE {$this->whereString}";    }    //更新    public function update($model){        if(empty($this->whereString))            trigger_error('<br/>ERROR MESSAGE:更新条件不可以是空');        if(empty($model)||count($model)==0)            trigger_error('<br/>ERROR MESSAGE:更新参数不可以是空')        $assins='';        foreach ($model as $key => $value) {            $rkey=$this->link->real_escape_string($key);            $rvalue=$this->link->real_escape_string($value);            if(!is_numeric($rvalue)){                $rvalue="'".$rvalue."'";            }            $assins.=$assins?",`$rkey`=$rvalue":"`$rkey`=$rvalue";        }        $this->sql="UPDATE {$this->tableString} SET $assins WHERE {$this->whereString}";    }    //查询    public function select(){        $this->sql="SELECT {$this->fieldString} FROM {$this->tableString}";        if(!empty($this->whereString)) $this->sql.=' WHERE '.$this->whereString;        if(!empty($this->orderString)) $this->sql.=' ORDER BY '.$this->orderString;        if(!empty($this->limitString)) $this->sql.=' LIMIT '.$this->limitString;        return $this->query($this->$sql);    }    /*开发环境用于调试的语句,生产环境可以删除*/    public function getSql(){        return $this->sql;    }}


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn