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

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();   }//============获取表结构:所有字段名==============//

functiongetTab(){$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;$icolumnCount();$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、付费专栏及课程。

余额充值