单例模式创建数据库封装类

<?php
 
/**
 * 单例模式创建数据库封装类
 */
class Db 
{
    //单例模式,本类的实例对象
    private static $instance = null;

    //数据库连接对象
    private $conn = null;

    //数据库的默认连接参数
    private $dbConfig = array(
        'host' => '127.0.0.1', //主机名称
        'port' => '3306',  //默认端口
        'user' => 'root',  //用户名
        'pass' => '123456',  //密码
        'charset' => 'utf8', //默认字符集
        'dbname' => 'study',  //默认数据库
    );

	//采用单例模式私有化防止外部实例化
	private	function __construct($param)
	{
        //初始化连接参数
        $this->dbConfig = array_merge($this->dbConfig,$param);
        //链接数据库
        $this->connect();
	}

	//禁止外部克隆
	private function __clone(){

	}

	// 获取当前类的单一实例
	public static function getInstance($param){
		if(!self::$instance instanceof self){
		    self::$instance = new self($param);
        }
        return self::$instance;
	}

    //数据库链接
    private  function  connect(){
	        //配置数据源
            $this->conn = new mysqli($this->dbConfig['host'],$this->dbConfig['user'],$this->dbConfig['pass'],$this->dbConfig['dbname']);
            $this->conn->query("SET NAMES {$this->dbConfig['charset']}");
            if($this->conn->connect_error){
            	die("连接失败: " . $this->conn->connect_error);
            }
    }

    //完成数据表的写操作:新增,更新,删除
   public function exec($sql){
   	return mysqli_query($this->conn,$sql);
   }

   //查询单条数据
   public function find($sql){
   		$result = mysqli_query($this->conn,$sql);
   		return mysqli_fetch_array($result);
   }


    //查询所有数据
    public function select($sql){
    	$result = mysqli_query($this->conn,$sql);
	    	while($row= mysqli_fetch_array($result)){
	        	$data[] = $row;
	    	}
	    return $data;
    }


}

?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单例模式是一种常用的设计模式,它可以保证一个只有一个实例,并提供一个全局访问点。在封装mysql数据库连接dbconn时,可以使用单例模式来确保只有一个数据库连接实例存在,避免多次连接数据库造成资源浪费和性能下降的问题。 具体实现可以在dbconn中定义一个静态成员变量instance,用于保存唯一的数据库连接实例。在构造函数中,可以通过调用mysql_real_connect函数来建立数据库连接,并将连接句柄保存在成员变量中。在析构函数中,可以调用mysql_close函数来关闭数据库连接。 为了保证线程安全,可以使用双重检查锁定机制来实现单例模式。即在getInstance函数中,先检查instance是否为空,如果为空,则加锁创建一个新的实例,否则直接返回已有的实例。 下面是一个简单的示例代码: ``` class dbconn { private: static dbconn* instance; MYSQL* conn; dbconn() { conn = mysql_real_connect(...); // 建立数据库连接 } ~dbconn() { mysql_close(conn); // 关闭数据库连接 } public: static dbconn* getInstance() { if (instance == nullptr) { std::lock_guard<std::mutex> lock(mutex); if (instance == nullptr) { instance = new dbconn(); } } return instance; } }; dbconn* dbconn::instance = nullptr; ``` 使用时可以通过dbconn::getInstance()来获取数据库连接实例,然后调用相应的mysql函数来执行数据库操作。例如: ``` dbconn* conn = dbconn::getInstance(); mysql_query(conn->conn, "SELECT * FROM table"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值