PHP ORM操作MySQL数据库

先来说说ORM的事儿,ORM全称是Object Relational Mapping[对象关系映射],结合博文标题理解ORM就是把PHP对象映射成数据表里的记录,使用PHP语言完成MySQL数据库的操作,写代码是一种很好的理解原理和概念的方式。
首先给出数据库里一张表的表结构,如下图所示:


图片.png

这里写图片描述
现在我们能够将这张表进行操作,比如使用setId_P(“5”),即可以设置Id_P字段的值,使用getId_P(),可以获得当前对象的值。所以我们需要建立model对象,在下面就是Person类,与表里的字段一一对应。

<?php
    class Person{  
        public $Id_P;
        public $Lastname;
        public $Firstname;
        public $Address;
        public $City;

        function getTableNameBdd()
        {
            return 'persons';
        }
        function setId_P($Id_P){
            $this->Id_P=$Id_P;
        }
        function getId_P(){
            return $this->Id_P;
        }
        function setLastName($Lastname){
            $this->Lastname=$Lastname;
        }
        function getLastName(){
            return $this->Lastname;
        }
        function setFirstName($Firstname){
            $this->Firstname=$Firstname;
        }
        function getFirstName(){
            return $this->Firstname;
        }
        function setAddress($Address){
            $this->Address=$Address;
        }
        function getAddress(){
            return $this->Address;
        }
        function setCity($City){
            $this->City=$City;
        }
        function getCity(){
            return $this->City;
        } 
    }
?> 

接下来实现如何连接MySQL数据库,先预定义数据库的基本信息服务器主机,用户名,密码,数据库名称,文件名称为db_config.php;

<?php
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "persondb");
define("DB_SERVER", "localhost");
?>

其次,连接数据库文件名称为db_connect.php;其代码如下所示:

<?php function connect(){ 
require_once __DIR__.'/db_config.php'; 
global $con; 
$con=mysqli_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysqli_connect_error()); 
$db=mysqli_select_db($con,DB_DATABASE)or die(mysqli_error()); 
return $con; } 
function close()
{ global $con; mysqli_close($con); } 
?>

现在我们使用ORM操作MySQL数据库,这也应该可以很好的理解ORM概念了。其文件名称为orm.php,代码如下:

<?php
    require_once __DIR__.'/db_connect.php';
    class orm{

        private static $con = NULL; 

       //链接数据库
        public function getConnection(){
            self::$con=connect();
            return self::$con;
        }

        //获得一个表的所有列名  
        public function getColumns($tableName) {  

            $sql = "show columns from ".$tableName;   
            $columns = array();  

            if(self::$con!=null){  

                $rtn = mysqli_query(self::$con,$sql);  

                while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){  

                    $columns[] = $row[0];  
                } 
            }  

            return $columns;  

        }  

        //从数据表中获取所有对象数据
        public function getAll($object){

            $tableName = $object->getTableNameBdd();
            $columns=$this->getColumns($tableName);
            $sql = "SELECT * FROM `".$tableName."`";

            if(self::$con!=null){
                $rtn=mysqli_query(self::$con,$sql);

                $arr=array();

                while ($rtn!=false&&($row=mysqli_fetch_array($rtn))) {
                    $index=-1;
                    $obj=new Person();

                    foreach ($columns as $key=>$column) {
                         $obj->{"set".ucfirst($column)}($row[++$index]);

                    }

                    $arr[]=$obj;

                }
                return $arr;
            }

            mysqli_close(self::$con);

        }

        //向数据表中插入对象数据
        public function save($object){

            $tableName = $object->getTableNameBdd();
            $columns=$this->getColumns($tableName);

            $tag=false;

            if (self::$con!=null) {

                $sql = "INSERT INTO `" . $tableName . "` (";

                foreach ($columns as $key => $column) {
                    $sql.= $column.",";
                }

                $sql=substr($sql,0,strlen($sql)-1).") values (";

                foreach ($columns as $key => $column) {
                    $value=$object->{"get".ucfirst($column)}();
                    $sql.="'".$value."',";
                }

                $sql=substr($sql,0,strlen($sql)-1);
                $sql.=")";

                mysqli_query(self::$con,$sql);
                $tag=true;
                mysqli_close(self::$con);

            }

            return $tag;

        }

        //修改数据表中的对象数据
        public function update($object){
            $tableName = $object->getTableNameBdd();
            $columns=$this->getColumns($tableName);
            $tag=false;
            if (self::$con!=null) {

                $sql="UPDATE `".$tableName."`SET ";
                for ($i=0; $i<count($columns);$i++) { 
                    $column=$columns[$i];
                    $value=$object->{"get".ucfirst($columns[$i])}();

                    if ($value==null) {
                        $sql.=$column."=null,";
                    }else{
                        $sql.=$column."='".$value."',";  
                    }
                }

                $sql=substr($sql,0,strlen($sql)-1);

                $sql.= " where ";  
                $tempColumn = $columns[0];  
                $tempValue = $object->{"get".ucfirst($columns[0])}(); 
                $sql.= $tempColumn."=".$tempValue;   
                mysqli_query(self::$con,$sql);
                $tag = true; 
                mysqli_close(self::$con);
            }

             return $tag; 

        }

        //删除数据表中的所有数据
        public function deleteALL($object){
            $tableName=$object->getTableNameBdd();
            $tag=false;
            $sql="delete from".$tableName;
            if (self::$con!=null) {
                mysqli_query(self::$con,$sql);
                $tag=true;
            }
            return $tag;
        }
        }
        ?>

下面我们就写一段代码去测试一下PHP对象对数据库的操作,需要在测试代码之前加一段注册给定的函数作为 __autoload 的实现 ,其代码是:

<?php
    spl_autoload_register(function($class){
        $name = str_replace('\\', '/', $class);
        require_once($name.'.php');
    });
?>

其测试代码名称为test.php,其代码如下所示:

<?php
require_once('autoloader.php');
$orm = new Orm();
$orm->getConnection();

//查询Persons表中的所有数据
$person = new Person();
$personArr = $orm->getAll($person);

//修改Persons表中的某一条数据
$person=new Person();
$person->setId_P("5");
$person->setLastName("ly");
$person->setFirstName("l");
$person->setAddress("js");
$person->setCity("nj");
$orm->save($person);
$person->setId_P("5");
$person->setLastName("l");
$person->setFirstName("y");
$tag=$orm->update($person);

//向Persons表中添加一条数据
$person=new Person();
$person->setId_P("6");
$person->setLastName("ly");
$person->setFirstName("l");
$person->setAddress("js");
$person->setCity("nj");
$orm->save($person);

//删除Persons表中的所有数据
$person=new Person();
$orm->deleteALL($person);

?>

上面的代码只是给简单的增删改查的演示,重点是理解ORM概念,以及用面向对象的思维方式来操作数据库的含义。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容