一个封装mysql函数的类

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 chengsion 的 blog

最近开始学习php 因为以前主要是在asp.net下写web应用程序,刚开始接触php的mysql函数的时候,感觉有些不习惯.试着按照ado.net的一些形式对mysql函数做了一个简单的封装.
目前主要有三个类mysqlclient_connection / mysqlclient_command / mysqlclient_datareader:

  • mysqlclient_connection 负责与mysql server建立连接
  • mysqlclient_command 为该类提供mysqlclient_connection和sql query后,执行mysql_query函数.
  • mysqlclient_datareader 为该类提供mysql_query返回的结果集,读取结果集的数据和字段信息. 关于类的代码如下:
    	class mysqlclient_connection
    	{
    		private $status;
    		private $handle;
    		private $server;
    		private $database;
    		private $username;
    		private $password;
    		public function __construct($server,$database,$username,$password)
    		{
    			$status = "closed";
    			$handle = 0;
    			$thi-->server = $server;
    			$this->database = $database;
    			$this->username = $username;
    			$this->password = $password;
    		}
    		
    		public function open()
    		{
    			$this->handle = mysql_connect($this->server,$this->username,$this->password) or die("connect mysql faild.");
    			if($this->handle != 0)
    			{
    				//echo "$this->database";
    				mysql_select_db($this->database,$this->handle) or ("database ".$database." is not exists or reject visited");
    			}
    			else
    			{
    				die("handle == 0");
    			}
    			$this->status = "open";
    			return true;
    		}
    		
    		public function close()
    		{
    			if($this->status == "open")
    			{
    				mysql_close($this->handle) or die("falid close this connection");
    				$this->status = "closed";
    				return true;
    			}
    			else
    			{
    				die("this connection is closed");
    			}
    		}
    		
    		public function gethandle()
    		{
    			return $this->handle;
    		}
    		
    		public function __destruct()
    		{
    			if($this->status == "open")
    			{
    				mysql_close($this->handle) or die("faild close this connection");
    				$this->status = "closed";
    				//return true;
    			}
    		}
    	}
    	
    	class mysqlclient_command
    	{
    		private $commandstring;
    		private $activeconnection;
    		
    		public function __construct($commandstring)
    		{
    			$this->commandstring = $commandstring;
    		}
    		
    		public function  setactiveconnection($connection)
    		{
    			$this->activeconnection = $connection;
    		}
    		
    		public function executedatareader()
    		{
    			if($this->activeconnection->gethandle() == 0)
    			{
    				die("this command does not have a active connection");
    			}
    			//mysql_select_db("mxb",$this->activeconnection->gethandle()) or die("selected faild again");
    			$result = mysql_query($this->commandstring,$this->activeconnection->gethandle()) or die($this->commandstring . $this->activeconnection->gethandle().mysql_error());
    			return $result;
    		}
    		
    		public function __destruct()
    		{
    			//
    		}
    	}
    	
    	class mysqlclient_datareader
    	{
    		private $result;
    		private $rowscount;
    		private $fieldscount;
    		private static $currentpos;
    		public function __construct()
    		{
    			mysqlclient_datareader::$currentpos = 0;
    		}
    		
    		public function setresult($result)
    		{
    			$this->result = $result;
    			$this->rowscount = mysql_num_rows($this->result);
    			$this->fieldscount = mysql_num_fields($this->result);
    		}
    		
    		public function nextrecord()
    		{
    			if(mysqlclient_datareader::$currentpos < $this->rowscount)
    			{
    				$temprow = mysql_fetch_array($this->result);
    				mysqlclient_datareader::$currentpos++;
    				
    				return $temprow;
    			}
    			else
    			{
    				return false;
    			}
    		}
    		
    		public function getfieldsrow()
    		{
    			for($i=0;$i<$this->fieldscount;$i++)
    			{
    				$field = mysql_fetch_field($this->result,$i);
    				$fieldsrow[] = $field;
    				
    				return $fieldsrow; 
    			}
    		}
    		
    		public function __destruct()
    		{
    			//
    		}
    	}
    


    我自己写了一个测试类的简单的php页 列出指定表中的数据 code:
    			$connection = new mysqlclient_connection(server,database,username,password);
    			$command = new mysqlclient_command("select * from user");
    			//$comman-->activeconnection = $connection;
    			$command->setactiveconnection($connection);
    			
    			$connection->open();
    			$result = $command->executedatareader();
    			$reader = new mysqlclient_datareader();
    			$reader->setresult($result);
    			while($row = $reader->nextrecord())
    			{
    				echo "
  • ".$row["id"]." : ".$row["name"]; } $connection->close(); ?>
  • 因为刚开始接触php,写的代码不是很成熟,希望各们朋友能提供修改意见. 非常感谢!

    本文关键:一个封装mysql函数的类
      相关方案
    Google
     

    本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

    go top