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

<?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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值