PHP中MySQL的封装


单例模式:

对于某些类,在使用它的时候,从头到尾(程序运行的开始到结束),都只需要一个对象,就可以完成所有任务。

单例:

某个类,只允许其“创建”出一个对象,即使去进行多次创建,也只能得到一个对象。

$obj1 = new A();

$obj2 = $obj1;       //此时还是1个对象,$obj2只是最终指向了跟$obj1同样的对象

$obj3 = new A();    //这时候才有了第二个对象。

但其实在php语言中,一个对象还可以使用clone运算符进行克隆,则就也会“生成”新对象。

因此,还需要在类中使用私有化措施来禁止克隆,最终,单例模式的实现如下:



<?php
//类名,也习惯上(推荐)使用跟文件名相似的名字
//定义一个mysql连接类,该类可以连接mysql数据库
//并实现其单例模式
//该类的功能还能够完成如下基本mysql操作:
//执行普通的增删改非返回结果集的语句
//执行select语句并可以返回3种类型的数据:
//多行结果(二维数组),单行结果(一维数组)
//单行单列(单个数据)
class MySQLDB{
	public $host;
	public $port;
	public $username;
	public $password;
	public $charset;
	public $dbname;

	//连接结果(资源)
	private static $link;

	private $resourc;

	public static function getInstance($config){
		if(!isset(self::$link)){
			self::$link = new self($config);
		}
		return self::$link;
	}
	
	//构造函数:禁止new
	private function __construct($config){
		//初始化数据
		$this->host = isset($config['host']) ? $config['host'] : 'localhost';
		$this->port = isset($config['port']) ? $config['port'] : '3306';
		$this->username = isset($config['username']) ? $config['username'] : 'root';
		$this->password = isset($config['password']) ? $config['password'] : '';
		$this->charset = isset($config['charset']) ? $config['charset'] : 'utf8';
		$this->dbname = isset($config['dbname']) ? $config['dbname'] : '';

		//连接数据库
		$this->connect();
		//设定连接编码
		$this->setCharset($this->charset);
		//选定数据库
		$this->selectDb($this->dbname);
	}
	//禁止克隆
	private function __clone(){}
	//这里进行连接
	public function connect(){
		$this->resourc = mysql_connect("$this->host:$this->port", "$this->username","$this->password") or die("连接数据库失败!");
	}
	public function setCharset($charset){
		//mysql_set_charset($charset, $this->resourc); 
		$this->query("set names $charset");
	}
	public function selectDb($dbname){
		//mysql_select_db($dbname, $this->resourc);
		$this->query("use $dbname;") ;
	}

	/**
	 * 功能:执行最基本(任何)sql语句
	 * 返回:如果失败直接结束,如果成功,返回执行结果
	 */
	public function query($sql){
		if(!$result = mysql_query($sql, $this->resourc))
		{
			echo ("<br />执行失败。");
			echo "<br />失败的sql语句为:" . $sql;
			echo "<br />出错信息为:" . mysql_error();
			echo "<br />错误代号为:" . mysql_errno();
			die();
		}
		return $result;
	}
	/**
	 * 功能:执行select语句,返回2维数组
	 * 参数:$sql 字符串类型 select语句
	 */
	public function getAll($sql){
		$result = $this->query($sql);
		$arr = array();	//空数组
		while( $rec = mysql_fetch_assoc( $result )){
			$arr[] = $rec;//这样就形成二维数组
		}
		return $arr;
	}
	//返回一行数据(作为一维数组)
	public function getRow($sql){
		$result = $this->query($sql);
		//$rec = array();
		if( $rec2 = mysql_fetch_assoc( $result )){//返回下标为字段名的数组
			//如果fetch出来有数据(也就是取得了一行数据),结果自然是数组
			return $rec2;
		}
		return false;
	}
	//返回一个数据(select语句的第一行第一列)
	//比如常见的:select count(*) as c from XXX where ...
	public function getOne($sql){
		$result = $this->query($sql);
		$rec = mysql_fetch_row($result);//返回下标为数字的数组,且下标一定是0,1,2, 3.....
										//如果没有数据,返回false
		if($rec === false){
			return false;
		}
		return $rec[0];	//该数组的第一项。

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值