为了账号安全,请及时绑定邮箱和手机立即绑定

pdo_helper数据库PDO操作类(未精简)第一部分

king老师,还有各位大大们,帮忙看下,我自己写的这个pdo操作类,不足的地方请指出。谢谢了!

<?php
/****************
*    pdo_dbhelper.class.php
*    pdo数据库操作帮助类
*
******************/
class Pdo_dbhelper{
    private $conn;//PDO对象
    private $stmt;//PDOStatement对象

    public function __construct(){
        $this->getConnection();
    }

    public function getConnection(){
        $database="anime";
        $host="127.0.0.1";
        $dns="mysql:dbname=".$database.";host=".$host;
        $user="root";
        $pwd="mysql";
        $charset="utf8";
        try{
            $pdo=new PDO($dns,$user,$pwd);
            $pdo->exec("set names ".$charset);
            $this->conn=$pdo;
        }catch(PDOException $e){
            echo $e->getMessage();
        }
    }

    public function preparedStatement($str_sql,$params){
        try{
            $this->stmt=$this->conn->prepare($str_sql);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置报错模式
            if(!empty($params)){
                foreach($params as $key=>$value){
                    $this->stmt->bindParam($key+1,$value);
                }
            }
            $result=$this->stmt->execute();
            return $result;
        }catch(PDOException $e){
            $e->getMessage();
        }
    }
    
    /*
    *    @function 添加数据
    *    @param string $table 表名, array $params 列名和值组成的数组
    *    @return boolean 返回true表示添加数据成功,返回false表示添加失败
    */
    public function create($table,$params){
        $str_sql="INSERT INTO `".$table."` (";
        $columnsArr=array();
        $placeholder=array();
        $valuesArr=array();
        foreach($params as $key=>$value){
            $columnsArr[]="`".$key."`";
            $placeholder[]="?";
            if(is_numeric($value)){
                $valuesArr[]=$value;
            }
            else{
                $valuesArr[]="\'".$value."\'";
            }
        }
        $str_columns=implode(",",$columnsArr);
        $str_values=implode(",",$placeholder);
        $str_sql.=$str_columns.") VALUES(".$str_values.")";
        return $this->preparedStatement($str_sql,$valuesArr);
    }
    
    /*
    *    @function 修改数据
    *    @param string $table 表名, array $params 列名和值组成的数组, array $condition 部位=>array("id","=","5")组成的条件数组
    *    @return boolean 返回true表示修改数据成功,返回false表示修改失败
    */
    public function update($table,$params,$condition){
        $str_sql="UPDATE ".$table." SET ";
        $columnsArr=array();
        $valuesArr=array();
        foreach($params as $key=>$value){
            $columnsArr[]="`".$key."`=?";
            if(is_numeric($value)){    
                $valuesArr[]=$value;
            }
            else{
                $valuesArr[]="\'".$value."\'";
            }
        }
        $str_columns=implode(",",$columnsArr);
        $condition_arr=$this->analyzeCondition($condition);//分析条件,返回数组
        $str_sql.=$str_columns.$condition_arr["str_condition"];
        if(!empty($condition_arr["value_arr_condition"])){
            $valuesArr=array_merge($valuesArr,$condition_arr["value_arr_condition"]);
        }
        return $this->preparedStatement($str_sql,$valuesArr);
    }

    /*
    *    @function 删除数据(一般不做物理删除)
    *    @param string $table 表名, array $condition 部位=>array("id","=","5")组成的条件数组
    *    @return boolean 返回true表示删除数据成功,返回false表示删除失败
    */
    public function delete($table,$condition){
        $str_sql="DELETE FROM `".$table."` ";
        $valuesArr=array();
        $condition_arr=$this->analyzeCondition($condition);
        $str_sql.=$condition_arr["str_condition"];
        //肯定有where条件不然就删表了,所以编码的时候就避免
        if(empty($condition_arr["value_arr_condition"])){
            return false;
        }
        else{
            $valuesArr=$condition_arr["value_arr_condition"];
        }
        return $this->preparedStatement($str_sql,$valuesArr);
    }
    
    /*
    *    @function 读取数据
    *    @param string $table 表名, array $params 由列名组成的一维数组 array $condition 部位=>array(array("id","=","5"),)组成的条件数组
    *    @return array 
    */
    public function readAll($table,$params,$condition){
        $str_sql="SELECT ";
        $columnsArr=array();
        $valuesArr=array();
        foreach($params as $key=>$value){
            $columnsArr[]="`".$value."`";
        }
        $str_columns=implode(",",$columnsArr);
        $condition_arr=$this->analyzeCondition($condition);
        $str_sql.=$str_columns." FROM `".$table."`".$condition_arr["str_condition"];
        echo $str_sql;
        if(!empty($condition_arr["value_arr_condition"])){
            $valuesArr=$condition_arr["value_arr_condition"];//有条件的情况下,
        }
        $this->preparedStatement($str_sql,$valuesArr);
        return $this->stmt->fetchAll(PDO::FETCH_COLUMN,0);
    }

    /*
    *    @function 返回受影响的行数
    *    @return string 
    */
    public function getfetchRowNum(){
        if($this->stmt==null){
            return false;
        }
        else{
            return $this->stmt->rowCount();
        }
    }
    
    /*
    *    @function 返回最后插入行的ID
    *    @return string 
    */
    public function getLastInsertId(){
        if($this->conn==null){
            return false;
        }
        else{
            return $this->conn->lastInsertId();
        }
    }

    /*
    *    @function 分析condition数组
    *    @param $condition 条件数组
    *    @return array ["str_condition"]条件的字符串部分,["value_arr_condition"]条件的值组成的数组
    */
    public function analyzeCondition($condition){
        $arr=array();
        $arr["str_condition"]="";
        $arr["value_arr_condition"]=array();
        if(isset($condition["where"])){
            $where_arr=$this->analyzeWhere($condition["where"]);
            $arr["str_condition"].=$where_arr["str"];
            $arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$where_arr["value_arr"]);
        }
        if(isset($condition["group"])){
            $group_arr=$this->analyzeGroup($condition["group"]);
            $arr["str_condition"].=$group_arr["str"];
            $arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$group_arr["value_arr"]);
        }
        if(isset($condition["having"])){
            $having_arr=$this->analyzeHaving($condition["having"]);
            $arr["str_condition"].=$having_arr["str"];
            $arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$having_arr["value_arr"]);
        }
        if(isset($condition["order"])){
            $order_arr=$this->analyzeOrder($condition["order"]);
            $arr["str_condition"].=$order_arr["str"];
            $arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$order_arr["value_arr"]);
        }
        if(isset($condition["limit"])){
            $limit_arr=$this->analyzeLimit($condition["limit"]);
            $arr["str_condition"].=$limit_arr["str"];
            $arr["value_arr_condition"]=array_merge($arr["value_arr_condition"],$limit_arr["value_arr"]);
        }
        return $arr;
    }
    
//接后续第二部分,太长了。


正在回答

举报

0/150
提交
取消
PDO—数据库抽象层
  • 参与学习       30044    人
  • 解答问题       396    个

本教程主要通过实战演练深入剖析PDO以加深理解

进入课程

pdo_helper数据库PDO操作类(未精简)第一部分

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信