PHP封装MySQL的单例

封装单例实现数据库连接 增删改查操作

<?php
//封装MySQL单例
class MySQLDB {
     
	private $host;		//主机地址
	private $port;		//端口号
	private $user;		//用户名
	private $pwd;		//密码
	private $dbname;	//数据接名
	private $charset;	//字符集
	private $link;		//连接对象
	private static $instance;
	private function __construct($param) {
     
		$this->initParam($param);
		$this->initConnect();
	}
	private function __clone() {
     
		
	}
	//获取单例
	public static function getInstance($param=array()) {
     
		if(!self::$instance instanceof self)
			self::$instance=new self($param);
		return self::$instance;
	}
	//初始化参数
	private function initParam($param) {
     
		$this->host=$param['host']??'127.0.0.1';
		$this->port=$param['port']??'3306';
		$this->user=$param['user']??'';
		$this->pwd=$param['pwd']??'';
		$this->dbname=$param['dbname']??'';
		$this->charset=$param['charset']??'utf8';
	}
	//连接数据库
	private function initConnect() {
     
		$this->link=@mysqli_connect($this->host,$this->user,$this->pwd,$this->dbname);
		if(mysqli_connect_error()){
     
			echo '数据库连接失败
'
; echo '错误信息:'.mysqli_connect_error(),'
'
; echo '错误码:'.mysqli_connect_errno(),'
'
; exit; } mysqli_set_charset($this->link,$this->charset); } //执行数据库的增、删、改、查 private function execute($sql) { if(!$rs=mysqli_query($this->link,$sql)){ echo 'SQL语句执行失败
'
; echo '错误信息:'.mysqli_error($this->link),'
'
; echo '错误码:'.mysqli_errno($this->link),'
'
; echo '错误的SQL语句:'.$sql,'
'
; exit; } return $rs; } /** *执行增、删、改 *@return bool 成功返回true,失败返回false */ public function exec($sql) { $key=substr($sql,0,6); if(in_array($key,array('insert','update','delete'))) return $this->execute($sql); else{ echo '非法访问
'
; exit; } } //获取自动增长的编号 public function getLastInsertId() { return mysqli_insert_id($this->link); } //执行查询语句 private function query($sql) { if(substr($sql,0,6)=='select' || substr($sql,0,4)=='show' || substr($sql,0,4)=='desc'){ return $this->execute($sql); }else{ echo '非法访问
'
; exit; } } /** * 将查询结果改为二维数组 *执行查询语句,返回二维数组 *@$sql string 查询sql语句 *@type string assoc|num|both */ public function fetchAll($sql,$type='assoc') { $rs=$this->query($sql); $type=$this->getType($type); //$rs代表从一个数据库查询中获取的结果集。 //mysqli_fetch_all 将所有结果行作为关联数组、数字数组或两者都提取 return mysqli_fetch_all($rs,$type); } //只有一条记录的时候 应该只返回一条记录 //匹配一维数组 public function fetchRow($sql,$type='assoc') { $list=$this->fetchAll($sql,$type); //如果二维数组不为空 则返回第一条数据 if(!empty($list)) return $list[0]; return array(); } //匹配一行一列 //如 查询数据的条数 只需要一行实际内容就行 public function fetchColumn($sql) { $list=$this->fetchRow($sql,'num'); if(!empty($list)) return $list[0]; return null; } //获取匹配类型 //设置数组键的类型 private function getType($type) { switch($type){ case 'num': return MYSQLI_NUM; case 'both': return MYSQLI_BOTH; default: return MYSQLI_ASSOC;//如果没有传入则默认的ASSOC } } } //测试 //配置参数 $param=array( 'user' => 'root', 'pwd' => 'root', 'dbname' => 'data' ); //获取单例 $db=MySQLDB::getInstance($param); //更新 //$db->exec("update news set title='青草' where id=2"); //插入 /* if($db->exec("insert into news values (null,'aa','bb',unix_timestamp())")) echo '编号是:'.$db->getLastInsertId(); */ //查询 //$list=$db->fetchAll('select * from news','aa'); //$list=$db->fetchRow('select * from news where id=1','aa'); $list=$db->fetchColumn('select count(*) from news'); echo '
';
var_dump($list);

你可能感兴趣的:(PHP,php)