php连接数据库类之单件模式

php相关 / 2012年07月16日 16时31分 / 10463人浏览
php连接数据库类之单件模式 单件模式是一种用于确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享时的程序设计方法(根据实际情况,可能需要几个类实例)。在某些情况下,这种程序设计方法是很有用处的。
host = isset($arrs['host'])?$arrs['host']:'localhost';
		$this->user = isset($arrs['user'])?$arrs['user']:'root';
		$this->pass = isset($arrs['pass'])?$arrs['pass']:'';
		$this->dbname = $arrs['dbname'];
		$this->chars = isset($arrs['chars'])?$arrs['chars']:'utf8';
		$this->port = isset($arrs['port'])?$arrs['port']:3306;

		$this->connect();   //连接数据库
	    $this->select_db(); //选择数据库
	    $this->set_names();  //设置编码
	}
	private function __clone(){

	}

   public static function mysql($arrs){
   	if(!is_object(self::$object)){
   		self::$object = new self($arrs); 
   	}
   	    return self::$object;
   	
   }
	private function connect(){
		$this->link = mysql_connect($this->host,$this->user,$this->pass);
		if(!$this->link){
			echo 'connect failed';
		}
	}

	private function query($sql){
		$result = mysql_query($sql,$this->link);
		if(!$result){
			echo mysql_errno($this->link).'-'.mysql_error($this->link);
		}
		return $result;
	}

	private function select_db(){
		$this->query("use {$this->dbname}");
	}

	private function set_names(){
		$this->query("set names {$this->chars}");
	}

	public function get_all($sql){
		$result = $this -> query($sql);
		while($res = mysql_fetch_assoc($result)){
			$r_all[] = $res;
		}
		return $r_all;
		mysql_free_result($result);

	}

	public function get_row($sql){
		if(strpos($sql,'limit') == FALSE){
			$sql .= ' limit 1';
		}
		$result = $this->query($sql);
		return mysql_fetch_assoc($result);
        mysql_free_result($result);
	}
	
	function __destruct(){
		is_resource($this->link)?mysql_close($this->link):'';
	}

}

$my = DB::mysql(array(
'pass'=>'root',
'dbname'=>'ecshop'
));
$sql = 'select goods_name,shop_price from goods';
$all = $my->get_all($sql);
var_dump($all);
$row = $my->get_row($sql);
var_dump($row);