PHP分层架构简单示例(2.数据访问类)
上篇简单介绍了如何实现一个业务逻辑类,这篇将说明如何生成一个数据访问类。完整的数据访问类理论上应该像一个ORM,可以将关系数据表映射成相应的对象操作方法, 这里我们根据上篇文章的需求,设计一个简单的数据访问类。
数据访问类最好不要包含任何业务逻辑,只有数据表的CRUD的方法以及根据规则的的事务等。我们的需求只是增加数据,修改和查看数据,只要实现这些方法即可。代码比较简单,不多说。

<?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服务。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库