如何在PHP中使用ORM方式操作MySQL数据库

  介绍

如何在PHP中使用ORM方式操作MySQL数据库?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

首先,我们的数据库有如下一张表:

如何在PHP中使用ORM方式操作MySQL数据库

我们希望能够对这张表,利用setUserid(“11111”),即可以设置标识;getUserid()既可以获得对象的userid。所以,我们需要建立模型对象,与数据库中的表对应。

由于每张表所对应的模型都应该是有设置/获取操作,所以,我们用一个父类BasicModel进行定义。其他模型都是继承至这个模型。

BasicModel的代码如下:

& lt; PHP ?   ,/*   ,,*,作者:Tammy π   ,,*,功能:模型类的基类,封装设置/获取操作   ,,*/class  BasicModel{才能   ,,,private  map 美元;=,空;   ,,,function  TbUser (), {   ,,,,,这个→美元map =,数组();   ,,,}   ,,,function  __set(键,美元价值){   ,,,,,这个→美元地图[$ key],=,美元价值;   ,,,}   ,,,function  __get(键){   ,,,,,return  $ this→地图(美元关键);   ,,,}   ,,,function  __call(名称、参数)美元,{   ,,,,,如果(substr(名称、美元0 3)==& # 39;集# 39;){   ,,,,,,,这个→美元__set(函数(substr(美元的名字,3)),美元参数[0]);   ,,,,,其他}{   ,,,,,,,return  $ this→__get(函数(substr(美元的名字,3)));   ,,,,,}   ,,,}   ,,}   祝辞;

那么,与tb_user表相互对应的模型类TbUser则对它进行继承。

& lt; php ?   ,,require_once (“BasicModel.php");   class 才能TbUser  extends  BasicModel {   ,,}   ?在

这样,我们就可以对TbUser的实例进行设置/获取操作了。

要用ORM进行操作数据库,就必须可以findByWhere(美元)进行查询,返回的为对象数组;保存(TbUser美元)进行保存;删除(obj美元)进行删除;更新(obj美元)进行更新操作。

本质上,就是用户传入的是对象,我们再利用代码将对象转换为SQL语句。本质上,执行的还是SQL语句。

所以,我们对一系列的操作用接口表示.IBasicDAO的代码如下:

& lt; php ?   interface 才能;IBasicDAO  {   ,,,public  function  findByWhere(美元);   ,,,public  function  findWhereOrderBy(美元,美元订单,开始=null,限制美元=null);   ,,,public  function 保存($ obj);   ,,,public  function 删除(obj美元);   ,,,public  function 更新($ obj);   ,,}   祝辞;

我们最关键,就是对此接口进行实现,完成对象和SQL的转换。
BasicDAO的代码如下:

& lt; php ?   ,,require_once (“IBasicDAO.php");   class 才能BasicDAO  implements  IBasicDAO {   ,,,protected  modelName 美元;=,空;   ,,,private  tableName 美元;=,空;   ,,,private  h 美元;=,“localhost";   ,,,private  user 美元;=,“root";   ,,,private  pass 美元;=,“root";   ,,,private  db 美元;=,“db_toilet";   ,,,//获得连接   ,,,public  function  getConnection () {   ,,,,,conn 美元;=,mysqli_connect ($ this→h, $ this→用户,这→美元,美元这→db);   ,,,,,return 康涅狄格州美元;   ,,,}   ,,,//初始化   ,,,public  function  init (), {   ,,,,,//根据模型的名字得到表的名字   ,,,,,这个→美元tableName =,函数(substr ($ this→modelName, 0, 2))干净_" .strtolower (substr ($ this→modelName, 2));   ,,,}   ,,,//获得一个表的列名   ,,,public  function  getColumn(表),{   ,,,,,sql 美元;=,“show  columns 得到“美元的表;   ,,,,,conn 美元;=,$ this→getConnection ();   ,,,,,columns 美元;=,数组();   ,,,,,如果($康涅狄格州!=null) {   ,,,,,,,rtn 美元;=,mysqli_query(康涅狄格州,sql美元);   ,,,,,,,,($研制!==false&及(行=mysqli_fetch_array美元($研制)!=null) {   ,,,,,,,,,美元列[],=,行[0]美元;   ,,,,,,,}   ,,,,,,,mysqli_close(康涅狄格州美元);   ,,,,,}   ,,,,,return 美元列;   ,,,}   ,,,//条件查询   ,,,public  function  findByWhere(美元){   ,,,,,//获得数据表的列名   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在PHP中使用ORM方式操作MySQL数据库