PHP单例实现数据库工具类

  • 该类是在单例模式下实现数据库的连接,选择,数据的单条查询,多条查询,以及总记录数,设置字符集以及销毁等功能.
  • 其中遵循三私一公,私有化了对象,构造方法以及克隆,只保留了一个getInstance的静态公有方法.

```<?php

class Db
{
    private static $obj = null;

    private $db_host;
    private $db_user;
    private $db_pass;
    private $db_name;
    private $charset;
    private $link;

    private function __construct($config = array())
    {
        $this->db_host = $config['db_host'];
        $this->db_user = $config['db_user'];
        $this->db_pass = $config['db_pass'];
        $this->db_name = $config['db_name'];
        $this->charset = $config['charset'];
        $this->connectDb();
        $this->selectDb();
        $this->setCharset();
    }

    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    public static function getInstance($config = array())
    {
        if (!self::$obj instanceof self)
        {
            self::$obj = new self($config);
        }
        return self::$obj;
    }

    private function connectDb()
    {
        if (!$this->link = @mysqli_connect($this->db_host,$this->db_user,$this->db_pass))
        {
            echo '连接MySQL数据库失败';
            die();
        }
    }

    private function selectDb()
    {
        if (!mysqli_select_db($this->link,$this->db_name))
        {
            echo '数据库选择失败';
            die();
        }
    }

    private function setCharset()
    {
        mysqli_set_charset($this->link,$this->charset);
    }

    public function exec($sql)
    {
        if (strtolower(substr($sql,0,6)) == 'select')
        {
            echo 'sql语句错误';
            die();
        }
        return mysqli_query($this->link,$sql);
    }

    private function query($sql)
    {
        if (strtolower(substr($sql,0,6)) != 'select')
        {
            echo 'sql语句错误';
            die();
        }
        return mysqli_query($this->link,$sql);
    }
    public function fetchOne($sql,$type=3)
    {
        $result = $this->query($sql);
        $types = [
            1 => MYSQLI_NUM,
            2 => MYSQLI_BOTH,
            3 => MYSQLI_ASSOC
        ];

        return mysqli_fetch_array($result,$types[$type]);
    }

    public function fetchAll($sql,$type=3)
    {
        $result = $this->query($sql);
        $types = [
            1 => MYSQLI_NUM,
            2 => MYSQLI_BOTH,
            3 => MYSQLI_ASSOC
        ];
        return mysqli_fetch_all($result,$types[$type]);
    }

    public function rowCount($sql)
    {
        $result = $this->query($sql);
        return mysqli_num_rows($result);
    }

    public function __destruct()
    {
        // TODO: Implement __destruct() method.
        mysqli_close($this->link);
    }
}
$arr = [
    'db_host' => '数据库地址',
    'db_user' => '用户名',
    'db_pass' => '密码',
    'db_name' => '数据库名字',
    'charset' => '字符集'
];
$db1 = Db::getInstance($arr);
$db2 = Db::getInstance($arr);
var_dump($db1,$db2);
发布了145 篇原创文章 · 获赞 38 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/yehuaner33/article/details/102707339