>  기사  >  백엔드 개발  >  ORM 기반의 PHP 운영 데이터베이스에 대한 자세한 설명

ORM 기반의 PHP 운영 데이터베이스에 대한 자세한 설명

*文
*文원래의
2018-01-03 14:15:161964검색

이 글에서는 ORM 방식을 기반으로 MySQL 데이터베이스를 운영하기 위한 PHP를 주로 소개하고, MySQL 데이터베이스의 일반적인 운영을 위한 PHP의 캡슐화 및 활용 기술을 구체적인 예시 형태로 분석하여 도움이 필요한 친구들이 참고할 수 있도록 하겠습니다. 그것이 모두에게 도움이 되기를 바랍니다.

이 문서의 예에서는 PHP가 ORM 방법을 기반으로 MySQL 데이터베이스를 작동하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

ORM------객체 지향 접근 방식을 사용하여 데이터베이스를 운영하는 지향 관계 매퍼입니다. 최종 분석에서는 여전히 SQL 문의 캡슐화에 관한 것입니다.

우선, 우리 데이터베이스에는 다음 테이블이 있습니다:

이 테이블의 사용자 ID를 설정하기 위해 setUserid("11111")를 사용하려고 합니다. getUserid()는 객체의 사용자 ID를 가져올 수도 있습니다. 따라서 데이터베이스의 테이블에 해당하는 모델 객체를 생성해야 합니다.

각 테이블에 해당하는 모델에는 set/get 연산이 있어야 하므로 상위 클래스인 BasicModel을 사용하여 정의합니다. 다른 모델은 이 모델을 상속합니다.

BasicModel의 코드는 다음과 같습니다.

<?php
  /*
   * author:Tammy Pi
   * function:Model类的基类,封装set/get操作
   */
  class BasicModel{
    private $map = null;
    function TbUser() {
      $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)==&#39;set&#39;){
        $this->__set(strtolower(substr($name,3)),$arguments[0]);
      }else{
        return $this->__get(strtolower(substr($name,3)));
      }
    }
  }
?>

그러면 tb_user 테이블에 해당하는 모델 클래스 TbUser가 이를 상속받습니다.

<?php
  require_once("BasicModel.php");
  class TbUser extends BasicModel{
  }
?>

이런 방식으로 TbUser 인스턴스에서 설정/가져오기 작업을 수행할 수 있습니다.

ORM을 사용하여 데이터베이스를 작동하려면 객체 배열을 반환하는 findByWhere($where)를 사용하여 쿼리할 수 있어야 합니다. ) 업데이트 작업을 수행합니다.

기본적으로 사용자가 전달하는 것은 객체이며, 그런 다음 코드를 사용하여 객체를 SQL 문으로 변환합니다. 본질적으로 SQL 문은 계속 실행됩니다.

그래서 우리는 일련의 작업을 표현하기 위해 인터페이스를 사용합니다. IBasicDAO의 코드는 다음과 같습니다.

<?php
  interface IBasicDAO {
    public function findByWhere($where);
    public function findWhereOrderBy($where,$order,$start=null,$limit=null);
    public function save($obj);
    public function delete($obj);
    public function update($obj);
  }
?>

우리에게 가장 중요한 것은 이 인터페이스를 구현하는 것입니다. 객체와 SQL의 변환을 완료합니다.
BasicDAO 코드는 다음과 같습니다.

<?php
  require_once("IBasicDAO.php");
  class BasicDAO implements IBasicDAO{
    protected $modelName = null;
    private $tableName = null;
    private $h = "localhost";
    private $user = "root";
    private $pass = "root";
    private $db = "db_toilet";
    //获得连接
    public function getConnection(){
      $conn = mysqli_connect($this->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 .= "&#39;".$value."&#39;,";
          }
        }
        $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]."=&#39;".$value."&#39;";
          }
          //执行
          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<count($columns);$i++){
          $column = $columns[$i];
          $value = $obj->{"get".ucfirst($columns[$i])}();
          if($value==null){
            $sql .= $column."=null,";
          }else if(preg_match("/^[0-9]*$/",$value)){
            $sql .= $column."=".$value.",";
          }else{
            $sql .= $column."=&#39;".$value."&#39;,";
          }
        }
        $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."=&#39;".$tempValue."&#39;";
        }
        //执行操作
        mysqli_query($conn,$sql);
        $tag = true;
        mysqli_close($conn);
      }
      return $tag;
    }
  }
?>

그래서 tb_user 테이블을 연산할 때 주로 사용하는 것은 TbUserDAO인데, 이는 modelName을 "TbUser"로 설정하는 것입니다. 코드는 연산 중인 테이블이 tb_user라는 것을 알고 일련의 연산을 합니다. 수행될 수 있습니다.

<?php
  require_once("BasicDAO.php");
  require_once("../model/TbUser.php");
  class TbUserDAO extends BasicDAO{
    function TbUserDAO(){
      $this->modelName = &#39;TbUser&#39;;
      parent::init();
    }
  }
?>

그러면 데이터베이스를 객체지향적으로 운영할 수 있습니다.
예:

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

데이터베이스의 레코드를 업데이트합니다. PHP 배치가 테이블 구조를 수정하는 방법에 대한 설명 된 설명 : PHP의 추가, 삭제, 수정 및 XML 파일의 검사에 대한 설명에 대한 설명이 설명되어 있습니다. PHP가 데이터베이스로 csv 파일 가져오기를 구현하는 방법

위 내용은 ORM 기반의 PHP 운영 데이터베이스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.