JGood

    博客已搬迁自: http://darkbull.net

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

PHP学习--做个大杂烩(用类似PetShop4.0的设计模式开发)(一)

     PetShop是微软发布的.NET平台下一个开源的项目,用它来展示.Net企业系统开发的能力。它系统架构与代码都比较简单,但设计与开发理念很值得我们学习。现在学习PHP,就用类似PetShop的设计模式,模仿着开发一个类似 猫扑大杂烩 的BBS,由于学习PHP才几天,很多东西理解不是很清楚,做这样一个系统,只要是为自己的提高,将一些常用的PHP知识有一个过滤,大概了解PHP开发的一些方法,一些过程,同时与所有PHP的初学者分享一些经验,大家共同提高。 水平有限,难免有错误,希望大家不啬赐教。
  
   这个BBS主要实现的功能:常用贴子发布,浏览以及回复。效果就像有名的猫扑大杂烩那样。用PHP5.2 + Apache2.0 + MySql(也支持Access),我使用的系统是WinXp
  
   PetShop最大的特点就是分层架构,各个层次之间非常清晰。在PetShop中有一个DBUtility的项目,里面有两个类:一个是针对SqlServer数据库的SQLHelper,另一个是针对Oracle数据库的OracleHelper,这是两个数据库操作辅助类,所有对数据库的操作,都是通过这两个类来完成的。今天的任务主要来完成数据库操作辅助类的开发

 

   在根目录下建一个文件夹Utility,再在其下建文件夹DataBaseHelper,用来存放今天的主角 MySqlHelper类与AccessHelper类,他们都实现IHelper接口。



  IHelper
接口定义了三个方法:ExecuteNonQuery(), ExecuteScalar(),   ExecuteReader()

       其中:ExecuteNonQuery()主要执行相应的SQL语句(Delete,Update,Insert),并返回受影响记录的条数;

     ExecuteScalar()执行相应SQL语句,并返回结果集中第一行的第一列

               ExecuteReader() 执行SQL语句,并返回结果集(主要用于Select语句)(对于些方法,使用不同的数据库会返回不同的结果集,如:在MySqlHelper类中,返回的是一个数组,而在AccessHelper中,返回的是游标,但不影响我们使用)

    系统要支持其他的数据库,都必须实现这个接口。

 

IHelper接口源代码如下:

 1    //---------------------------------------------
 2    //----------  数据辅助类接口  ---------
 3    //---------------------------------------------
 4    interface IHelper
 5    {
 6        public function ExecuteNonQuery($strSql);
 7        
 8        public function ExecuteScalar($strSql);
 9        
10        public function ExecuteReader($strSql);
11    }

 

  MySqlHelperAccessHelper都实现了IHelper接口,下面主要以MySqlHelper类为示例来讲解。

  MySqlHelper类实现了IHelper接口,它有一个私有成员:conn,数据库连接标识符变量。在类的构造函数中,这个变量被初始化,并选择相应的数据库。源代码如下:
                           

 1        //数据库连接标识
 2    private $conn;
 3        
 4        //构造函数
 5                  //初始化变量
 6        public function __construct()
 7        {
 8            $this->conn = mysql_connect("localhost", "root", "jld");
 9            if(!$this->conn)
10            {
11                throw new Exception("无法连接MySql");    
12            }
13            mysql_select_db("MySite", $this->conn);    
14        }    

  MySqlHelper既然实现了IHelper接口,那么就必须实现接口中定义的方法:ExecuteNonQuery,ExecuteScalar,ExecuteReader。其实现的源代码如下(代码比较简单,就不用多解释了,不了解的可以查一下PHP中文手册):

 1       //执行SQL操作,返回受影响记录条数
 2        public function ExecuteNonQuery($strSql)
 3        {
 4            $result = mysql_query($strSql);
 5            
 6            if(!$result)
 7            {
 8                throw new Exception("无法执行SQL操作==>MySqlHelper->ExecuteNonQuery({$strSql})");    
 9            }
10            
11            return $result;
12        }
13
14        
15        //将记录结果保存到数组中,以数组的形式返回
16        public function ExecuteReader($strSql)
17        {
18            $result = mysql_query($strSql);
19            
20            if($result)
21            {
22                while($temp = mysql_fetch_array($result))
23                    $MyValue = $temp;
24                    
25                mysql_free_result($result);
26                
27                return $MyValue;
28            }
29        }
30        
31        
32        //执行SQL操作,返回第一条记录第一个字段的值
33        public function ExecuteScalar($strSql)
34        {
35            if($result = $this->ExecuteReader($strSql))
36                return $result[0][0];
37        }

   
  主体部分已经完成,这里还有一个小小的注意:在用ASP.NET的时候,每次连接数据库,执行完相应的操作之后,必须立即马上关闭连接,以避免资源的浪费。所以,我在这里添加了一个方法:Free(),用以释放数据库连接资源。在每用完相应操作后,就调用Free()方法。

 1        //释放数据库连接
 2        public function Free()
 3        {
 4            try
 5            {    
 6                mysql_close($this->conn);
 7            }
 8            catch(Exception $ex)
 9            {
10                ;    
11            }
12        }

   
   MySqlHelper 数据库辅助类就这样,感觉还是很简单的。

   示例源代码下载
posted on 2007-03-03 12:43  JBoy  阅读(915)  评论(3)    收藏  举报