| 
 | 
 
 
            本文实例讲述了PHP基于ORM方式操作MySQL数据库。分享给大家供大家参考,具体如下: 
ORM----Oriented Relationship Mapper,即用面向对象的方式来操作数据库。归根结底,还是对于SQL语句的封装。 
首先,我们的数据库有如下一张表: 
  
我们希望能够对这张表,利用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@163.com"); 
$tbUser->setUsername("fetching"); 
$tbUserDAO->update($tbUser); 
echo "执行成功!"; 
print_r($list); 
这样对数据库中的记录进行更新。 
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+Oracle数据库程序设计技巧总结》、《PHP+MongoDB数据库操作技巧大全》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 
希望本文所述对大家PHP程序设计有所帮助。 
             
             
您可能感兴趣的文章:php实现mysql数据库备份类php mysql数据库操作类php连接mysql数据库代码PHP备份/还原MySQL数据库的代码常用的PHP数据库操作方法(MYSQL版)全新的PDO数据库操作类php版(仅适用Mysql)PHP数据库操作之基于Mysqli的数据库操作类库Php连接及读取和写入mysql数据库的常用代码PHP连接和操作MySQL数据库基础教程一款简单实用的php操作mysql数据库类php实现MySQL数据库备份与还原类实例PHP实现PDO的mysql数据库操作类 
         |   
 
 
 
 |