• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

PHPPDO自动重连

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

<?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 "初始化数据库连接失败\n";    
        };
    }

    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})\n";
                    $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);

?>


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHPCI框架调试开启报错信息方法发布时间:2022-07-10
下一篇:
media_add.phpdedecms后台文件任意上传漏洞的解决方案发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap