PHP分层架构简单示例(2.数据访问类)
上篇简单介绍了如何实现一个业务逻辑类,这篇将说明如何生成一个数据访问类。完整的数据访问类理论上应该像一个ORM,可以将关系数据表映射成相应的对象操作方法, 这里我们根据上篇文章的需求,设计一个简单的数据访问类。
数据访问类最好不要包含任何业务逻辑,只有数据表的CRUD的方法以及根据规则的的事务等。我们的需求只是增加数据,修改和查看数据,只要实现这些方法即可。代码比较简单,不多说。
View Code
<?php
require_once('ConnectToDB.php');
class NewsData
{
private $con;
//加入一条数据
public function InsertOne($news)
{
$this->con = ConnecToDB::GetConnec();
$sql = "INSERT INTO news (Title,Content,PubTime,NewsClassId)
Value ('{$news->GetTitle()}','{$news->GetContent()}',
'{$news->GetPubTime()}','{$news->GetNewsClassId()}')";
$result=mysql_query($sql,$this->con);
if ($result)
{
$sql0 = "SELECT LAST_INSERT_ID() from news";
$resultSet=mysql_query($sql0,$this->con);
$ID=mysql_fetch_row($resultSet);
return $ID;
}else
{
return 0;
}
}
//修改一条数据
public function UpdateOne($news)
{
$this->con=ConnecToDB::GetConnec();
$sql = "UPDATE news SET Title='{$news->GetTitle()}',Content='{$news->GetContent()}',
PubTime='{$news->GetPubTime()}',NewsClassId='{$news->GetNewsClassId()}' WHERE Id='{$news->GetId()}'";
$result=mysql_query($sql,$this->con);
if ($result)
{
return $news->GetId();
}else
{
return 0;
}
}
//取出一个博客数据,这里映射成一个键只数组
public function GetOne($id)
{
$this->con=ConnecToDB::GetConnec();
$sql="SELECT * FROM news WHERE Id=$id";
$result=mysql_query($sql,$this->con);
$row=mysql_fetch_assoc($result);
$newsArray = array();
$newsArray["Id"] = $row["Id"];
$newsArray["Title"] = $row["Title"];
$newsArray["Content"] = $row["Content"];
$newsArray["PubTime"] = $row["PubTime"];
mysql_free_result($result);
return $newsArray;
}
}
?>
注意的是ConnectToDB.php是一个单例连接数据库的类,这个类可以在这里找到
连接方法如下:
$this->con = ConnecToDB::GetConnec();
GetOne($id)方法取出的数据理论上应该映射为Blog对象,但是php中数组功能比较强大,这里我们映射成相应的键值数组。
到这里,最简单的数据访问类已经完成。
比如我们再一个三层架构的UI中要加入一篇新博客,获取数据后,只需要调用Blog业务逻辑类的AddOne()方法,查看的话只需调用GetOne()方法。在MVC框架中,Model过于庞大的话,也可以这样分层;同样需要开放API时,可以对业务逻辑层上加一个服务层来调用业务逻辑类的方法来实现RESTful等WEB服务。