1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > PHP基于ORM方式操作MySQL数据库办法

PHP基于ORM方式操作MySQL数据库办法

时间:2021-11-29 00:30:08

相关推荐

PHP基于ORM方式操作MySQL数据库办法

后端开发|php教程

MySQL,数据库,php

后端开发-php教程具体如下:

网上问卷调查系统 源码,vscode设置编码语言,ubuntu关掉dhcp,tomcat嵌入felix,sqlite导入已有的表,qq空间上传照片插件,怎么开发一个前端ui框架,如何设计网络爬虫python,php访问统计代码,萍乡短视频seo,网站首页菜单栏,网页客服图标闪烁代码,手机检测单模板lzw

ORM—-Oriented Relationship Mapper,即用面向对象的方式来操作数据库。归根结底,还是对于SQL语句的封装。

婚纱网站免费源码,ubuntu 安装区间多大,得物爬虫比价,php matches,seo宣传词lzw

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

自媒体平台 源码,ubuntu突然关机重启,tomcat运行一阵就卡,郑州有爬虫馆,PHP中常用的运算符,美国seo招聘lzw

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

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

BasicModel的代码如下:

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的代码如下:

h,$this->user,$this->pass,$this->db);return $conn; } //初始化 public function init() {//根据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,然后就可以进行一系列操作了。

modelName = TbUser;parent::init(); } }?>

那么,就可以采用面向对象的方式对数据库进行操作了。

如:

$tbUserDAO = new TbUserDAO();$tbUser = new TbUser();$tbUser->setUserid("fetchingsoft@");$tbUser->setUsername("fetching");$tbUserDAO->update($tbUser);echo "执行成功!";print_r($list);

这样对数据库中的记录进行更新。

相关推荐:

实现form自动提交的方法详解

phpstorm中如何使用正则匹配删除空行、注释行

PHPstorm最全快捷键总结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。