加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

一个好用的PDO类封装

发布时间:2020-12-13 16:07:18 所属栏目:PHP教程 来源:网络整理
导读:?php class pdocurl{ protected $_dsn = 'mysql:host=localhost;dbname=liuyan';protected $_name = 'root';protected $_pass = 'root';protected $_condition = array();protected $pdo;protected $fetchAll;protected $query;protected $result;protected

<?php
class pdocurl{

protected $_dsn = 'mysql:host=localhost;dbname=liuyan';
protected $_name = 'root';
protected $_pass = 'root';
protected $_condition = array();
protected $pdo;
protected $fetchAll;
protected $query;
protected $result;
protected $num;
protected $mode;
protected $prepare;
protected $row;
protected $fetchAction;
protected $beginTransaction;
protected $rollback;
protected $commit;
protected $char;
private static $get_mode;
private static $get_fetch_action;

/**
 *pdo construct
 */
public function __construct($pconnect = false) {

    $this->_condition = array(PDO::ATTR_PERSISTENT => $pconnect);
    $this->pdo_connect();
}

/**
 *pdo connect
 */
private function pdo_connect() {

    try{
        $this->pdo = new PDO($this->_dsn,$this->_name,$this->_pass,$this->_condition);
    } catch(Exception $e) {
        return $this->setExceptionError($e->getMessage(),$e->getline,$e->getFile);
    }

}

/**
 *self sql get value action
 */
public function getValueBySelfCreateSql($sql,$fetchAction = "assoc",$mode = null) {

    $this->fetchAction = $this->fetchAction($fetchAction);
    $this->result = $this->setAttribute($sql,$this->fetchAction,$mode);
    $this->AllValue = $this->result->fetchAll();
    return $this->AllValue;
}

/**
 *select condition can query
 */
private function setAttribute($sql,$fetchAction,$mode) {

    $this->mode = self::getMode($mode);
    $this->fetchAction = self::fetchAction($fetchAction);
    $this->pdo->setAttribute(PDO::ATTR_CASE,$this->mode);
    $this->query = $this->base_query($sql);
    $this->query->setFetchMode($this->fetchAction);
    return $this->query;
}

/**
 *get mode action
 */
private static function getMode($get_style){

    switch($get_style) {
        case null:
            self::$get_mode = PDO::CASE_NATURAL;
            break;
        case true:
            self::$get_mode = PDO::CASE_UPPER;
            break;
        case false;
            self::$get_mode= PDO::CASE_LOWER;
            break;
    }
    return self::$get_mode;

}

/**
 *fetch value action
 */
private static function fetchAction($fetchAction) {

    switch($fetchAction) {
        case "assoc":
            self::$get_fetch_action = PDO::FETCH_ASSOC; //asso array
            break;
        case "num":
            self::$get_fetch_action = PDO::FETCH_NUM;//num array
            break;
        case "object":
            self::$get_fetch_action = PDO::FETCH_OBJ; //object array
            break;
        case "both":
            self::$get_fetch_action = PDO::FETCH_BOTH;//assoc array and num array
            break;
        default:
            self::$get_fetch_action = PDO::FETCH_ASSOC;
            break;
    }

    return self::$get_fetch_action;
}

/**
 *get total num action
 */
public function rowCount($sql) {

    $this->result = $this->base_query($sql);
    $this->num = $this->result->rowCount();
    return $this->num;

}

/*
*simple query and easy query action
*/
public function query($table,$column = "*",$condition = array(),$group = "",$order = "",$having = "",$startSet = "",$endSet = "",$params = null){

    $sql = "select ".$column." from `".$table."` ";
    if ($condition != null) {

        foreach($condition as $key=>$value) {
            $where .= "$key = '$value' and ";
        }

        $sql .= "where $where";
        $sql .= "1 = 1 ";
    }

    if ($group != "") {
        $sql .= "group by ".$group." ";
    }

    if ($order != "") {
        $sql .= " order by ".$order." ";
    }
    if ($having != "") {
        $sql .= "having '$having' ";
    }
    if ($startSet != "" && $endSet != "" && is_numeric($endSet) && is_numeric($startSet)) {
        $sql .= "limit $startSet,$endSet";
    }
    $this->result = $this->getValueBySelfCreateSql($sql,$params);
    return $this->result;
}

/**
 *execute delete update insert and so on action
 */
public function exec($sql) {
    $this->result = $this->pdo->exec($sql);
    $substr = substr($sql,6);
    if ($this->result) {
        return $this->successful($substr);
    } else {
        return $this->fail($substr);
    }
}

/**
 *prepare action
 */
public function prepare($sql) {

    $this->prepare = $this->pdo->prepare($sql);
    $this->setChars();
    $this->prepare->execute();
    while($this->rowz = $this->prepare->fetch()) {

        return $this->row;

    }
}

/**
 *USE transaction
 */
public function transaction($sql) {

    $this->begin();
    $this->result = $this->pdo->exec($sql);
    if ($this->result) {
        $this->commit();
    } else {
        $this->rollback();
    }
}

/**
 *start transaction
 */
private function begin() {

    $this->beginTransaction = $this->pdo->beginTransaction();
    return $this->beginTransaction;
}

/**
 *commit transaction
 */
private function commit() {

    $this->commit = $this->pdo->commit();
    return $this->commit;
}

/**
 *rollback transaction
 */
private function rollback() {

    $this->rollback = $this->pdo->rollback();
    return $this->rollback;
}
/**
 *base query
 */
private function base_query($sql) {

    $this->setChars();
    $this->query = $this->pdo->query($sql);
    return $this->query;

}

/**
 *set chars
 */
private function setChars() {

    $this->char = $this->pdo->query("SET NAMES 'UTF8'");
    return $this->char;
}

/**
 *process sucessful action
 */
private function successful($params){

    return "The ".$params." action is successful";
}

/**
 *process fail action
 */
private function fail($params){

    return "The ".$params." action is fail";
}

/**
 *process exception action
 */
private function setExceptionError($getMessage,$getLine,$getFile) {

    echo "Error message is ".$getMessage."<br /> The Error in ".$getLine." line <br /> This file dir on ".$getFile;
    exit();
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读