zoukankan      html  css  js  c++  java
  • PHP PDO 自动重连

    <?php

    //-----config--------------------------------------//

    $dbHost = 'localhost';
    $dbName = 'aaa';
    $dbUser = 'root';
    $dbPass = '';

    //--------------------------------------------------//


    class database{
        private $dbObj = false;
        private $dbHost = false;
        private $dbName = false;
        private $dbUser = false;
        private $dbPass = false;

        function __construct($dbHost, $dbName, $dbUser, $dbPass){
            $this->dbHost = $dbHost;
            $this->dbName = $dbName;
            $this->dbUser = $dbUser;
            $this->dbPass = $dbPass;
            while(!$this->connect()){
                sleep(1);
                echo "初始化数据库连接失败 ";    
            };
        }

        public function connect(){
            try{
                $this->dbObj = new PDO("mysql:host={$this->dbHost};dbname={$this->dbName};charset=UTF8", $this->dbUser, $this->dbPass, Array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES'UTF8';"));
                $this->dbObj->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                return true;
            }catch(PDOException $e){
                return false;
            }
        }

        public function query($sql, $type = 'array'){
            //$sql = $this->dbObj->quote($sql);
            try{
                switch($type){
                    case 'array':
                        $dbObj = $this->dbObj->query($sql);
                        if(!$dbObj) return false;
                        $result = $dbObj->fetchAll(PDO::FETCH_ASSOC);
                        break;
                    case 'row':
                        $dbObj = $this->dbObj->query($sql);
                        if(!$dbObj) return false;
                        $result = $dbObj->fetch(PDO::FETCH_ASSOC);
                        break;
                    case 'exec':
                        $result = $this->dbObj->exec($sql);
                        break;
                }
                if($result) return $result;
                else return Array();

            }catch(PDOException $e){
                if($e->errorInfo[0] == 70100 || $e->errorInfo[0] == 2006){
                    $count = 0;
                    while(!$this->connect()){
                        sleep(1);
                        echo "数据库重新连接失败(try:{$count}) ";
                        $count++;
                    };
                    return $this->query($sql, $type);
                }else exit($e->errorInfo[2]);
            }
        }

        public function insert($table, $insertArray){   //单引号问题
            $columns = array_keys($insertArray);
            $values = array_values($insertArray);
            unset($insertArray);
            foreach($values as $key => $value) $values[$key] = $this->dbObj->quote($value);
            foreach($columns as $key => $value) $columns[$key] = "{$table}.{$value}";
            $columns = implode(',', $columns);
            $values = implode(',', $values);
            $query = "INSERT INTO {$table} ({$columns}) VALUES ({$values})";
            return $this->query($query, 'exec');
        }

        public function update($table, $updateArray, $where){
            $updates = Array();
            foreach ($updateArray as $key => $value){
                if($value != NULL) $updates[] = $key.'='.$this->dbObj->quote($value);
                else $updates[] = $key.'= NULL';
            }
            unset($updateArray);
            $updates = implode(',', $updates);
            $query = "UPDATE {$table} SET {$updates} WHERE {$where}";
            // echo $query;
            return $this->query($query, 'exec');
        }

        public function del($table, $where){
            $query = "DELETE FROM $table WHERE {$where}";
            return $this->query($query, 'exec');
        }

        public function insertId(){
            return $this->dbObj->lastInsertId();
        }

        public function quote($value){
            return $this->dbObj->quote($value);
        }
    }

    $db = new database($dbHost, $dbName, $dbUser, $dbPass);

    ?>

  • 相关阅读:
    git取消文件跟踪
    servlet
    查杀端口进程
    初始化git仓库,并push到远端
    tomcat
    bootstrap
    idea中web工程错误
    i++和++i
    js算法
    编程工具
  • 原文地址:https://www.cnblogs.com/shenming/p/3628396.html
Copyright © 2011-2022 走看看