您的位置:首页 > 编程语言 > PHP开发

PHP ORM操作MySQL数据库

2017-05-24 21:35 393 查看
先来说说ORM的事儿,ORM全称是Object Relational Mapping[对象关系映射],结合博文标题理解ORM就是把PHP对象映射成数据表里的记录,使用PHP语言完成MySQL数据库的操作,写代码是一种很好的理解原理和概念的方式。

首先给出数据库里一张表的表结构,如下图所示:



现在我们能够将这张表进行操作,比如使用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概念,以及用面向对象的思维方式来操作数据库的含义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php mysql orm