濮阳杆衣贸易有限公司

主頁 > 知識庫 > php封裝的pdo數據庫操作工具類與用法示例

php封裝的pdo數據庫操作工具類與用法示例

熱門標簽:九江外呼系統(tǒng) 智能電話機器人排名前十名南京 阿里云400電話申請加工單 抖音有個地圖標注是什么意思 保定crm外呼系統(tǒng)運營商 地下城堡2圖九地圖標注 西區(qū)企業(yè)怎么做地圖標注入駐 海南人工外呼系統(tǒng)有效果嗎 七魚外呼系統(tǒng)停用嗎

本文實例講述了php封裝的pdo數據庫操作工具類與用法。分享給大家供大家參考,具體如下:

?php
header("Content-Type:text/html;charset=utf-8");
class PdoMysql{
  public static $config = array();//設置連接參數,配置信息
  public static $link = null;//保存連接標識符
  public static $pconnect = false;//是否開啟長連接
  public static $dbVersion = null;//保存數據庫版本
  public static $connected = false;//判斷是否連接成功
  public static $PDOStatement = null;//保證PDOStatement對象
  public static $queryStr = null;//保存最后執(zhí)行的操作
  public static $error = null;//保存錯誤信息
  public static $lastInsertId = null;//保存上一步插入操作保存的AUTO_INCREMANT
  public static $numRows = null;//受影響記錄的條數
  /**
   * 構造函數,連接數據庫
   *
   * @param   array|string $dbConfig The database configuration
   *
   * @return   boolean    ( description_of_the_return_value )
   */
  public function __construct($dbConfig=''){
    if(!class_exists("PDO")){
      self::throw_exception("不支持PDO,請先開啟");
    }
    if(!is_array($dbConfig)){
      $dbConfig = array(
              'hostname' => 'localhost',
              'username' => 'root',
              'password' => '1234',
              'database' => 'test',
              'hostport' => '3306',
              'dbms'   => 'mysql',
              'dsn'   => 'mysql:host=localhost;dbname=test'
            );
    }
    if(empty($dbConfig['hostname'])){
      self::throw_exception("沒有定義數據庫配置,請先定義");
    }
    self::$config = $dbConfig;
    if(empty(self::$config['params'])){
      self::$config['params'] = array();
    }
    if(!isset(self::$link)){
      $configs = self::$config;
      if(self::$pconnect){
        //開啟長連接,添加到配置數組中
        $configs['params'][constant("PDO::ATTR_PERSISTENT")] = true;
      }
      try {
        self::$link = new PDO($configs['dsn'],$configs['username'],$configs['password'],$configs['params']);
      } catch (PDOException $e) {
        self::throw_exception($e->getMessage());
      }
      if(!self::$link){
        self::throw_exception("PDO連接錯誤");
        return false;
      }
      self::$link->exec("set names utf8");
      self::$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
      unset($configs);
    }
  }
  /**
   * 得到所有記錄
   *
   * @param   type> $sql  The sql
   *
   * @return   type> All.
   */
  public static function getAll($sql=null){
    if($sql!=null){
      self::query($sql);
    }
    $result = self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC"));
    return $result;
  }
  /**
   * 得到一條記錄
   *
   * @param   type> $sql  The sql
   *
   * @return   type> The row.
   */
  public static function getRow($sql=null){
    if($sql!=null){
      self::query($sql);
    }
    $result = self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC"));
    return $result;
  }
  /**
   * 執(zhí)行增刪改操作,返回受影響記錄的條數
   *
   * @param   type>  $sql  The sql
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public static function execute($sql=null){
    $link = self::$link;
    if(!$link)return false;
    if($sql!=null){
      self::$queryStr = $sql;
    }
    if(!empty(self::$PDOStatement))self::free();
    $result = $link->exec(self::$queryStr);
    self::haveErrorThrowException();
    if($result){
      self::$lastInsertId = $link->lastInsertId();
      self::$numRows = $result;
      return $result;
    }else{
      return false;
    }
  }
  /**
   * 根據主鍵查找記錄
   *
   * @param   type> $tabName The tab name
   * @param   type> $priId  The pri identifier
   * @param   string $fields  The fields
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function findById($tabName,$priId,$fields='*'){
    $sql = 'SELECT %s FROM %s WHERE id=%d';
    return self::getRow(sprintf($sql,self::parseFields($fields),$tabName,$priId));
  }
  /**
   * 執(zhí)行普通查詢
   *
   * @param   type> $tables The tables
   * @param   type> $where  The where
   * @param   string $fields The fields
   * @param   type> $group  The group
   * @param   type> $having The having
   * @param   type> $order  The order
   * @param   type> $limit  The limit
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function find($tables,$where=null,$fields='*',$group=null,$having=null,$order=null,$limit
    =null){
    $sql = 'SELECT '.self::parseFields($fields).' FROM '.$tables
    .self::parseWhere($where)
    .self::parseGroup($group)
    .self::parseHaving($having)
    .self::parseOrder($order)
    .self::parseLimit($limit);
    $data = self::getAll($sql);
    return $data;
  }
  /**
   * 添加記錄
   *
   * @param   type> $data  The data
   * @param   type> $table The table
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function add($data,$table){
    $keys = array_keys($data);
    array_walk($keys, array('PdoMySQL','addSpecialChar'));
    $fieldsStr = join(',',$keys);
    $values = "'".join("','",array_values($data))."'";
    $sql = "INSERT {$table}({$fieldsStr}) VALUES({$values})";
    return self::execute($sql);
  }
  /**
   * 更新數據
   *
   * @param   type> $data  The data
   * @param   type> $table The table
   * @param   type> $where The where
   * @param   type> $order The order
   * @param   type> $limit The limit
   */
  public static function update($data,$table,$where=null,$order=null,$limit=null){
    $sets = '';
    foreach ($data as $key => $value) {
      $sets .= $key."='".$value."',";
    }
    $sets = rtrim($sets,',');
    $sql = "UPDATE {$table} SET {$sets}".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
    echo $sql;
  }
  /**
   * 刪除數據
   *
   * @param   type> $data  The data
   * @param   type> $table The table
   * @param   type> $where The where
   * @param   type> $order The order
   * @param   type> $limit The limit
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function delete($table,$where=null,$order=null,$limit=null){
    $sql = "DELETE FROM {$table} ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit);
    return self::execute($sql);
  }
  /**
   * 執(zhí)行查詢
   *
   * @param   string  $sql  The sql
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public static function query($sql=''){
    $link = self::$link;
    if(!$link)return false;
    //判斷之前是否有結果集,如果有的話,釋放結果集
    if(!empty(self::$PDOStatement))self::free();
    self::$queryStr = $sql;
    self::$PDOStatement = $link->prepare(self::$queryStr);
    $res = self::$PDOStatement->execute();
    self::haveErrorThrowException();
    return $res;
  }
  /**
   * 獲取最后執(zhí)行的sql
   *
   * @return   boolean The last sql.
   */
  public static function getLastSql(){
    $link = self::$link;
    if(!$link){
      return false;
    }
    return self::$queryStr;
  }
  /**
   * 獲取最后插入的ID
   *
   * @return   boolean The last insert identifier.
   */
  public static function getLastInsertId(){
    $link = self::$link;
    if(!$link){
      return false;
    }
    return self::$lastInsertId;
  }
  /**
   * 獲得數據庫的版本
   *
   * @return   boolean The database version.
   */
  public static function getDbVersion(){
    $link = self::$link;
    if(!$link){
      return false;
    }
    return self::$dbVersion;
  }
  /**
   * 得到數據庫中表
   *
   * @return   array ( description_of_the_return_value )
   */
  public static function showTables(){
    $tables = array();
    if(self::query("show tables")){
      $result = self::getAll();
      foreach ($result as $key => $value) {
        $tables[$key] = current($value);
      }
    }
    return $tables;
  }
  /**
   * 解析where條件
   *
   * @param   type> $where The where
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function parseWhere($where){
    $whereStr = '';
    if(is_string($where)!empty($where)){
      $whereStr = $where;
    }
    return empty($whereStr) ? '' : ' WHERE '.$whereStr;
  }
  /**
   * 解析group
   *
   * @param   type> $group The group
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function parseGroup($group){
    $groupStr = '';
    if(is_array($group)){
      $groupStr = implode(',', $group);
    }elseif(is_string($group)!empty($group)){
      $groupStr = $group;
    }
    return empty($groupStr) ? '' : ' GROUP BY '.$groupStr;
  }
  /**
   * 解析having
   *
   * @param   type> $having The having
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function parseHaving($having){
    $havingStr = '';
    if(is_string($having)!empty($having)){
      $havingStr = $having;
    }
    return empty($havingStr) ? '' : ' HAVING '.$havingStr;
  }
  /**
   * 解析order
   *
   * @param   type> $order The order
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function parseOrder($order){
    $orderStr = '';
    if(is_string($order)!empty($order)){
      $orderStr = $order;
    }
    return empty($orderStr) ? '' : ' ORDER BY '.$orderStr;
  }
  /**
   * 解析limit
   *
   * @param   type> $limit The limit
   *
   * @return   type> ( description_of_the_return_value )
   */
  public static function parseLimit($limit){
    $limitStr = '';
    if(is_array($limit)){
      $limitStr = implode(',', $limit);
    }elseif(is_string($limit)!empty($limit)){
      $limitStr = $limit;
    }
    return empty($limitStr) ? '' : ' LIMIT '.$limitStr;
  }
  /**
   * 解析字段
   *
   * @param   type> $fields The fields
   *
   * @return   string ( description_of_the_return_value )
   */
  public static function parseFields($fields){
    if(is_array($fields)){
      array_walk($fields, array('PdoMySQL','addSpecialChar'));
      $fieldsStr = implode(',', $fields);
    }elseif (is_string($fields)!(empty($fields))) {
      if(strpos($fields, '`')===false){
        $fields = explode(',', $fields);
        array_walk($fields, array('PdoMySQL','addSpecialChar'));
        $fieldsStr = implode(',', $fields);
      }else{
        $fieldsStr = $fields;
      }
    }else{
      $fieldsStr = "*";
    }
    return $fieldsStr; 
  }
  /**
   * 通過反引號引用字字段
   *
   * @param   string $value The value
   *
   * @return   string ( description_of_the_return_value )
   */
  public static function addSpecialChar($value){
    if($value==="*"||strpos($value,'.')!==false||strpos($value,'`')!==false){
      //不用做處理
    }elseif(strpos($value, '`')===false){
      $value = '`'.trim($value).'`';
    }
    return $value;
  }
  /**
   * 釋放結果集
   */
  public static function free(){
    self::$PDOStatement = null;
  }
  /**
   * 拋出錯誤信息
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public static function haveErrorThrowException(){
    $obj = empty(self::$PDOStatement) ? self::$link : self::$PDOStatement;
    $arrError = $obj->errorInfo();
    if($arrError[0]!='00000'){
      self::$error = 'SQLSTATE=>'.$arrError[0].'br/>SQL Error=>'.$arrError[2].'br/>Error SQL=>'.self::$queryStr;
      self::throw_exception(self::$error);
      return false;
    }
    if(self::$queryStr==''){
      self::throw_exception('沒有執(zhí)行SQL語句');
      return false;
    }
  }
  /**
   * 自定義錯誤處理
   *
   * @param   type> $errMsg The error message
   */
  public static function throw_exception($errMsg){
    echo $errMsg;
  }
  /**
   * 銷毀連接對象,關閉數據庫
   */
  public static function close(){
    self::$link = null;
  }
}
$pdo = new PdoMysql();
var_dump($pdo->showTables());

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP基于pdo操作數據庫技巧總結》、《php+mysqli數據庫程序設計技巧總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP基于MySQLI函數封裝的數據庫連接工具類【定義與用法】
  • 常用PHP封裝分頁工具類
  • php封裝的驗證碼工具類完整實例
  • PHP封裝的驗證碼工具類定義與用法示例
  • PHP抓取、分析國內視頻網站的視頻信息工具類
  • PHP常用工具類大全附全部代碼下載
  • PHP實現基于面向對象的mysqli擴展庫增刪改查操作工具類
  • PHP實現可添加水印與生成縮略圖的圖片處理工具類
  • php實現網頁緩存的工具類分享
  • PHP常用的類封裝小結【4個工具類】

標簽:韶關 遼陽 昭通 甘肅 涼山 九江 十堰 梅河口

巨人網絡通訊聲明:本文標題《php封裝的pdo數據庫操作工具類與用法示例》,本文關鍵詞  php,封,裝的,pdo,數據庫,操作,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php封裝的pdo數據庫操作工具類與用法示例》相關的同類信息!
  • 本頁收集關于php封裝的pdo數據庫操作工具類與用法示例的相關信息資訊供網民參考!
  • 推薦文章
    达拉特旗| 丽水市| 武隆县| 鹤岗市| 阿巴嘎旗| 汉寿县| 霍林郭勒市| 同心县| 祥云县| 思南县| 凌源市| 乡城县| 贵阳市| 化州市| 大渡口区| 望江县| 兴城市| 五家渠市| 海晏县| 琼中| 临海市| 广昌县| 铅山县| 广元市| 万年县| 阿拉尔市| 雅安市| 北宁市| 孝感市| 土默特右旗| 蕉岭县| 灌阳县| 新邵县| 临西县| 大邑县| 英德市| 赤水市| 东方市| 谷城县| 武平县| 平乡县|