php mysql orm_PHP ORM操作MySQL数据库
ORM----Oriented Relationship Mapper,即用面向对象的方式来操作数据库。归根结底,还是对于SQL语句的封装。
首先,我们的数据库有如下一张表:
我们希望能够对这张表,利用setUserid("11111"),即可以设置userid;getUserid()既可以获得对象的userid。所以,我们需要建立model对象,与数据库中的表对应。
由于每张表所对应的model都应该是有set/get操作,所以,我们用一个父类BasicModel进行定义。其他model都是继承至这个model。
BasicModel的代码如下:
* function:Model类的基类,封装set/get操作*/
classBasicModel{private $map = null;functionTbUser() {$this->map = array();
}function __set($key,$value){$this->map[$key] = $value;
}function __get($key){return $this->map[$key];
}function __call($name,$arguments) {if(substr($name,0,3)=='set'){$this->__set(strtolower(substr($name,3)),$arguments[0]);
}else{return $this->__get(strtolower(substr($name,3)));
}
}
}?>
那么,与tb_user表相互对应的model类TbUser则对它进行继承。
}?>
这样,我们就可以对TbUser的实例进行set/get操作了。
要用ORM进行操作数据库,就必须可以findByWhere($where)进行查询,返回的为对象数组;save($tbUser)进行保存;delete($obj)进行删除;update($obj)进行更新操作。
本质上,就是用户传入的是对象,我们再利用代码将对象转换为SQL语句。本质上,执行的还是SQL语句。
所以,我们对一系列的操作用接口表示。IBasicDAO的代码如下:
}?>
我们最关键,就是对此接口进行实现。完成对象和SQL的转换。
BasicDAO的代码如下:
public functiongetConnection(){$conn = mysqli_connect($this->h,$this->user,$this->pass,$this->db);return $conn;
}//初始化
public functioninit() {//根据model的名字得到表的名字
$this->tableName = strtolower(substr($this->modelName,0,2))."_".strtolower(substr($this->modelName,2));
}//获得一个表的列名
public function getColumn($tableName) {$sql = "show columns from ".$tableName;$conn = $this->getConnection();$columns = array();if($conn!=null){$rtn = mysqli_query($conn,$sql);while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){$columns[] = $row[0];
}mysqli_close($conn);
}return $columns;
}//条件查询
public function findByWhere($where){//获得数据表的列名
$columns = $this->getColumn($this->tableName);//拼接sql语句
$sql = "select * from ".$this->tableName." where ".$where;$conn = $this->getConnection();$arr = array();if($conn!=null){$rtn = mysqli_query($conn,$sql);while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){$index = -1;$obj = new $this->modelName();foreach($columns as $column){$obj->{"set".ucfirst($column)}($row[++$index]);
}$arr[] = $obj;
}mysqli_close($conn);
}return $arr;
}//分页查询;支持排序
public function findWhereOrderBy($where,$order,$start=null,$limit=null){//获得数据表的列名
$columns = $this->getColumn($this->tableName);//拼接sql语句
$sql = "select * from ".$this->tableName." where ".$where." order by ".$order;if($start!=null&&$limit!=null){$sql .= "limit ".$start.",".$limit;
}$conn = $this->getConnection();$arr = array();if($conn!=null){$rtn = mysqli_query($conn,$sql);while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){$index = -1;$obj = new $this->modelName();foreach($columns as $column){$obj->{"set".ucfirst($column)}($row[++$index]);
}$arr[] = $obj;
}mysqli_close($conn);
}return $arr;
}//保存操作
public function save($obj){$columns = $this->getColumn($this->tableName);$conn = $this->getConnection();$tag = false;if($conn!=null){$sql = "insert into ".$this->tableName."(";foreach($columns as $column){$sql .= $column.",";
}$sql = substr($sql,0,strlen($sql)-1).") values(";foreach($columns as $column){$value = $obj->{"get".ucfirst($column)}();//判断$value的类型
if($value==null){$sql .= "null,";
}else if(preg_match("/^[0-9]*$/", $value)){//是数字
$sql .= $value.",";
}else{$sql .= "'".$value."',";
}
}$sql = substr($sql,0,strlen($sql)-1);$sql .= ")";//执行sql语句
mysqli_query($conn,$sql);$tag = true;mysqli_close($conn);
}return $tag;
}//删除操作
public function delete($obj){$conn = $this->getConnection();$tag = false;if($conn!=null){$sql = "delete from ".$this->tableName." where ";$columns = $this->getColumn($this->tableName);$value = $obj->{"get".ucfirst($columns[0])}();if($value!=null){//是数字
if(preg_match("/^[0-9]*$/", $value)){$sql .= $columns[0]."=".$value;
}else{$sql .= $columns[0]."='".$value."'";
}//执行
mysqli_query($conn,$sql);$tag = true;
}mysqli_close($conn);
}return $tag;
}//更新操作
public function update($obj){$conn = $this->getConnection();$columns = $this->getColumn($this->tableName);$tag = false;if($conn!=null){$sql = "update ".$this->tableName." set ";for($i=1;$i{"get".ucfirst($columns[$i])}();if($value==null){$sql .= $column."=null,";
}else if(preg_match("/^[0-9]*$/",$value)){$sql .= $column."=".$value.",";
}else{$sql .= $column."='".$value."',";
}
}$sql = substr($sql,0,strlen($sql)-1);$sql .= " where ";$tempColumn = $columns[0];$tempValue = $obj->{"get".ucfirst($columns[0])}();if(preg_match("/^[0-9]*$/", $tempValue)){$sql .= $tempColumn."=".$tempValue;
}else{$sql .= $tempColumn."='".$tempValue."'";
}//执行操作
mysqli_query($conn,$sql);$tag = true;mysqli_close($conn);
}return $tag;
}
}?>
那么,对tb_user表进行操作时,主要利用的是TbUserDAO,它将modelName设置为"TbUser",代码就得知操作的表为tb_user,然后就可以进行一系列操作了。
<?phprequire_once ("BasicDAO.php");require_once("../model/TbUser.php");class TbUserDAO extendsBasicDAO{functionTbUserDAO(){$this->modelName = 'TbUser';
parent::init();
}
}?>
那么,就可以采用面向对象的方式对数据库进行操作了。
如:
$tbUserDAO = new TbUserDAO();
$tbUser = new TbUser();
$tbUser->setUserid("fetchingsoft@163.com");
$tbUser->setUsername("fetching");
$tbUserDAO->update($tbUser);
echo "执行成功!";
print_r($list);
这样对数据库中的记录进行更新。
php mysql orm_PHP ORM操作MySQL数据库相关推荐
- Spring boot(web 组件,ORM 操作 MySQL,接口架构风格—RESTful,集成 Redis,集成 Dubbo,打包)
文章目录 1.3 第三章 Spring Boot 和 web 组件 1.3.1 SpringBoot 中拦截器 1.3.2 Spring Boot 中使用 Servlet 1.3.3 Spring B ...
- flask mysql orm_Flask笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy...
Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...
- python封装类连接mysql数据_python操作mysql数据库基本类封装
# -*- coding: UTF-8 -*- import MySQLdb as mdb class MysqldbHelper(object): """操作mysql ...
- mysql 四大基础操作_mysql数据库的基本操作
mysql数据库的基本操作 首先我们要把mysql装好 mkdir chen/ mount.cifs //192.168.100.23/LNMP chen/ [root@localhost ~]# y ...
- shell mysql e_shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作...
mysql -hhostname -Pport -uusername -ppassword -e 相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作m ...
- shell mysql e_shell脚本操作mysql数据库
使用 mysql -e 参数可以执行各种 sql 的各种操作语句.不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法. 格式:mysql -hhostname -Pp ...
- php操作mysql数据_PHP - 操作MySQL数据库
第16章 PHP操作MySQL 学习要点: 1.PHP连接到MySQL 2.增删改查 3.其他常用函数 如果你已经具有了使用PHP.SQL和MySQL的丰富经验,现在就可以把所有这些技术组合在一起.P ...
- linux shell操作mysql,Linux shell操作mysql数据库的方法
摘要 腾兴网为您分享:Linux shell操作mysql数据库的方法,鱼乐贝贝,宜信,嘻嘻动漫,西餐菜谱等软件知识,以及包装效果图,德州人社,evasi0n.com,ios迅雷,民革e家,动态表情, ...
- java mysql nclob_java语言操作Oracle数据库中的CLOB数据类型 (转)
java语言操作Oracle数据库中的CLOB数据类型 (转)[@more@] 有关字段类型的相关信息可以查阅oracle技术网.下面摘抄一些有关blob.clob等类型的说明.又便于大家的了解. 字 ...
最新文章
- python querystring encode_Java UriUtils.encodeQueryParam方法代碼示例
- RHEL7 修改SSH默认端口
- 【SSH进阶】No result defined for action **的解决方案
- Android:实现弹窗效果
- 善用佳软推荐几个很好用的软件以备使用
- diamond简介和搭建
- 视频截取软件哪个好用?免费的视频截取软件分享
- 内存继续涨价 LPDDR4/LPDDR4X内存标准升级
- w ndows10用多大c盘,安装win10系统c盘要多大才够用
- 重标极差分析 Hurst指数计算
- 计算机常用英语词汇 短语,四级英语常用词汇短语
- 按虚拟化对象划分,实现虚拟化存储的方式,主要包含哪几种?
- jeecg官网(jeecg官网 ios开发)
- PyWiFi 文档说明
- python获取网页链接地址
- 服装ERP软件体系究竟差在哪里?
- 应用、permission、资源
- vs2019无法连接到远程服务器,VS2019无法添加引用问题
- Spark物理计划和CBO和AQE
- js添加多marker 高德地图_【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...
热门文章
- linux刷新磁盘的命令,sync命令 – 刷新文件系统缓冲区
- matlab中sinks,MATLAB Simulink模块库详解(二)Sinks篇
- R语言使用apriori算法进行关联规则挖掘实战:关联规则概念、频繁项集、支持度(support)、置信度(confidence)、提升度(lift)、apriori算法
- R语言ggplot2可视化自定义可视化结果的背景色(background color)实战:改变整个画板(panel)的背景色、改变图像(plot)区域的背景色
- R语言scale_colour_brewer()函数和scale_fill_brewer()函数调色板及填充ggplot2图像实战
- 影像组学视频学习笔记(18)-使用MRIcroGL软件格式转换、勾画ROI、Li‘s have a solution and plan.
- CentOS包管理器yum
- Linux grep 命令
- 连接php的作用是什么,什么是超链接,有什么作用
- Linux系统介绍 文本查看、操作、统计命令(head/tail cat/tac less/more • wc sort uniq • cut paste)