设为首页 收藏本站
查看: 395|回复: 0

[经验分享] 一个mysql pdo的封装类

[复制链接]

尚未签到

发表于 2018-9-30 06:11:14 | 显示全部楼层 |阅读模式
  //一个PDO实现类
  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." The Error in ".$getLine." line  This file dir on ".$getFile;
  exit();
  }
  }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-605917-1-1.html 上篇帖子: mysql计划事件的开启 下篇帖子: MySQL数据库的重建操作[linux]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表