(转)mysql数据库类pdo对象操作

来源:互联网 发布:淘宝千百惠女装 编辑:程序博客网 时间:2024/06/04 19:21
<?php  /*************************************************/  /**        数据库操作类(增、删、改、查)          **/  /**         使用pdo中的stmt类实现             **/  /**  只要创建对象,传入一个表名作为参数,就可以 **/  /**   对象中增、删、改、查的方法进行对表操作    **/  /** 问题email:zql_0539@163.com     **/  /*************************************************/  class DB{   private $tabName;//表名     private $pdo;//pdo对象    private $fields;//表中的字段    function __construct($tabName){    $this->tabName=$tabName;     try{          $this->pdo=new PDO("mysql:host=localhost;dbname=oop","root","111111");      $this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);     }catch(PDOException $e){      echo "数据库连接失败:".$e->getMessage();     }     $this->fields=$this->getTab();   }     //============获取表结构:所有字段名==============//    function getTab(){     $result=$this->pdo->query("desc {$this->tabName}"); //执行SQL语句(desc)    $fields=array();    foreach($result as $row){     //将表中的字段放到$fields中,其中主键用关联式存放,其他字段用索引式存放     if($row["Key"]=="PRI"){           //存放主键字段        $fields["pri"]=$row["Field"];       }else{        //存放普通字段      $fields[]=$row["Field"];     }    }    return $fields;   }    //==============向数据库中插入数据===============//   function insert($post=null){    try{    if(is_null($post)){      //判断传来的参数是否为空,若为空则用$_POST赋值     $post=$_POST;    }    $fields="";       //INSERT语句中的所有字段名     $zwf="";        //INSERT语句中的占位符     $values=array();      //要想插入的数据所存放的数组     foreach($post as $key=>$val){   //遍历$post      if(in_array($key,$this->fields)){  //判断数组中的键值是否在数组$this->fields中,为真时执行      $fields.=$key.",";    //拼装字段名    $zwf.=":".$key.",";    //拼装命名占位符    $values[$key]=$val;    //将要插入的数据放入到数组中     }    }    $fields=rtrim($fields,",");    //去掉字段名字符串右边的逗号(,)      $zwf=rtrim($zwf,",");     //去掉命名占位符字符串右边的逗号(,)    $sql="INSERT INTO {$this->tabName}({$fields}) VALUES({$zwf})";    $stmt=$this->pdo->prepare($sql);   //处理打算执行的SQL语句      if($stmt->execute($values)){    //执行预处理的SQL语句,向服务器发送数据           echo "添加成功!";      }      }catch(PDOException $e){           echo $e->getMessage();      }    }      //==============删除记录方法===============//   function delete($id){    try{    $values=array();      //参数数据所存放的数组    if(is_array($id)){      //如果参数是数组     $zwf="";       //DELETE语句中的?占位符     foreach($id as $val){    //遍历参数数组      $values[]=$val;    //参数数组中的每个数据放到$values中      $zwf.="?,";     //拼装占位符     }     $zwf=rtrim($zwf,",");    //去掉?占位符字符串右边的逗号(,)     $sql="DELETE FROM {$this->tabName} WHERE {$this->fields["pri"]} in({$zwf})";    }else{     $values[]=$id;      //将参数存放到数组中     $sql="DELETE FROM {$this->tabName} WHERE {$this->fields["pri"]}=?";    }    $stmt=$this->pdo->prepare($sql);   //处理打算执行的SQL语句    if($stmt->execute($values)){    //执行预处理的SQL语句,向服务器发送数据         echo "删除成功!";    }    }catch(PDOException $e){         echo $e->getMessage();    }     }    //==============更新表中的数据===============//   function update($post){   try{    if(is_null($post)){      //判断传来的参数是否为空,若为空则用$_POST赋值     $post=$_POST;    }    $pri=$post[$this->fields["pri"]];   //获取主键字段的值    unset($post[$this->fields["pri"]]);   //在$post数组中删除主键字段    $fields="";       //INSERT语句中的所有字段名    $values=array();      //要更新的新数据所存放的数组    foreach($post as $key=>$val){   //遍历$post     if(in_array($key,$this->fields)){  //判断数组中的键值是否在数组$this->fields中,为真时执行      $fields.=$key."=?,";    //拼装修改字段字符串      $values[]=$val;    //将要插入的数据放入到数组中     }    }    $values[]=$pri;      //将主键字段的值插入到数据数组的最后    $fields=rtrim($fields,",");    //去掉更新数据指令字符串右边的逗号(,)    $sql="UPDATE {$this->tabName} set $fields where {$this->fields["pri"]}=?";    $stmt=$this->pdo->prepare($sql);   //处理打算执行的SQL语句    if($stmt->execute($values)){    //执行预处理的SQL语句,向服务器发送数据     echo "修改成功!";    }    }catch(PDOException $e){         echo $e->getMessage();    }     }    //==============查询数据的方法===============//   function comsql($arr,$args,$type){    try{    if(!empty($arr["field"])){     //如果字段参数不为空,则赋给$fields。为空时,拆分$this->fields赋给$fields     $fields=$arr["field"];    }else{         $fields=implode(",",$this->fields);    }    if(!empty($arr["where"])){    //判断where条件是否为空,     $where=" WHERE ".$arr["where"];     //echo $where;    }else{         $where="";    }    if(!empty($arr["order"])){    //判断order 排序是否为空         $order=" ORDER BY ".$arr["order"];    }else{         $order=" ORDER BY ".$this->fields["pri"]." ASC";    }    if(!empty($arr["limit"])){     //判断limit是否为空         $limit=" LIMIT ".$arr["limit"];    }else{     $limit="";    }     if($type){   //如果为true,则运行统计要查询结果集的数目,若为false,则查询元组     $sql="select count(*) as count from {$this->tabName}{$where}{$order}{$limit}";    }else{     $sql="select {$fields} from {$this->tabName}{$where}{$order}{$limit}";    if($args){         $stmt=$this->pdo->prepare($sql);         $stmt->execute($args);           return $stmt;    }    }catch(PDOException $e){         echo $e->getMessage();    }   }    //==============查询记录===============//   function select($arr=array(),$args=array()){    try{        $stmt=$this->comsql($arr,$args,false);    $values=array();       //将结果集绑定到数组$values中的成员上    for($i=0;$i<$stmt->columnCount();$i++){     $fieldinfo=$stmt->getColumnMeta($i);  //获取各个字段的信息     $fields[$i]=$fieldinfo["name"];   //将各个字段的名称赋给数组$fields     $stmt->bindColumn($fields[$i],$values[$fields[$i]]);//通过列名称绑定到数组$values中的成员上    }    while($stmt->fetch()){      //从结果集中获取数据(循环一次就将一条记录赋给$values数组,然后就$values数组赋给$t数组,这时$t数组的下标是字段名,值是记录值。然后再将$t数组赋给$result,这样$result中的每一个成员就是一个数组(一条记录)):                 $values["name]="zhangsan",$values["age"]=25......           $t=array();           foreach($values as $key=>$val){               $t[$key]=$val;         }         $result[]=$t;    }    return $result;     }catch(PDOException $e){         echo $e->getMessage();    }   }      //=============查询记录的数目===============//   function total($arr=array(),$args=array()){        try{            $stmt=$this->comsql($arr,$args,true);   //调用comsql()方法来统计要查询结果集的数目            $stmt->bindColumn("count",$count);   //通过列名称绑定到变量$name上            $stmt->fetch();       //获取数据            return $count;        //输出数据        }catch(PDOException $e){             echo $e->getMessage();        }   }   } 

 

0 0