php基于PDO实现功能强大的MYSQL封装类实例

作者:小炒花生米 时间:2023-11-16 22:50:27 

本文实例讲述了php基于PDO实现功能强大的MYSQL封装类。分享给大家供大家参考,具体如下:


class CPdo{
protected $_dsn = "mysql:host=localhost;dbname=test";
protected $_name = "root";
protected $_pass = "";
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 = "",$fetchAction = "assoc",$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, $fetchAction, $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, 0 ,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();
}
}

希望本文所述对大家PHP程序设计有所帮助。

标签:php,PDO,MYSQL,封装类
0
投稿

猜你喜欢

  • python爬虫基础之urllib的使用

    2022-02-10 19:01:18
  • PHP实现设计模式中的抽象工厂模式详解

    2024-06-05 09:39:58
  • python3 读取Excel表格中的数据

    2021-01-14 23:03:42
  • vueJs函数toRaw markRaw使用对比详解

    2024-04-09 10:46:23
  • Python lambda表达式filter、map、reduce函数用法解析

    2022-03-30 03:52:31
  • Linux下升级安装python3.8并配置pip及yum的教程

    2022-03-08 13:17:06
  • Python爬取股票交易数据并可视化展示

    2022-02-06 13:13:22
  • 浅谈MySQL之select优化方案

    2024-01-27 03:32:38
  • mysql基础教程:安装与操作

    2009-07-30 08:18:00
  • Python通过dxfgrabber库实现获取CAD信息

    2021-02-26 00:18:49
  • pycharm下打开、执行并调试scrapy爬虫程序的方法

    2022-08-07 09:30:52
  • python字符串排序方法

    2023-11-16 10:44:18
  • python中DataFrame数据合并merge()和concat()方法详解

    2022-05-23 15:00:16
  • [翻译]标记语言和样式手册 chapter 5 表单

    2008-01-23 17:20:00
  • 写了一个小巧的jquery拾色工具

    2009-12-21 14:22:00
  • sql存储过程获取汉字拼音头字母函数

    2011-11-03 16:58:05
  • 基于tkinter中ttk控件的width-height设置方式

    2023-07-04 21:32:20
  • FrontPage XP设计教程3——网页的布局

    2008-10-11 12:20:00
  • 浅谈Python线程的同步互斥与死锁

    2022-06-26 17:38:37
  • 详解windows下vue-cli及webpack 构建网站(四) 路由vue-router的使用

    2024-05-21 10:31:02
  • asp之家 网络编程 m.aspxhome.com