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 None.gif    // ---------------------------------------------
 2 None.gif    //----------  数据辅助类接口  ---------
 3 None.gif    //---------------------------------------------
 4 None.gif      interface  IHelper
 5 None.gif    {
 6 None.gif         public   function  ExecuteNonQuery( $strSql );
 7 None.gif        
 8 None.gif         public   function  ExecuteScalar( $strSql );
 9 None.gif        
10 None.gif         public   function  ExecuteReader( $strSql );
11 None.gif    }

 

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

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

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

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

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

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

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

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

    示例源代码下载

转载于:https://www.cnblogs.com/JBoy/archive/2007/03/03/662654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值