MVP.PHP 数据同步






4.47/5 (3投票s)
MVP 是一个用于管理数据库表的类库,并提供简单的迁移解决方案。
引言
MVP.PHP 是一个包含 2 个主要类和其他实用函数的库。MVP.PHP 使数据表模型定义比以往任何时候都更容易,无论使用何种开发框架,并使 PHP 数组和 SQL 表列之间建立简单的关系。
MVP.PHP 包含 MVP 和 ENTITY 以及直接在 .php 文件中定义的相关函数。
背景
访问 MySQL 数据库和定义表依赖于框架,并非易事。因此,mvp.php 试图使定义表更容易、更快地迁移和由程序员操作,并为他带来对 MySQL 查询的自然访问。
理解概念
如前所述,该库包含两个主要类。
Entity:此类用于定义数据库中的表并与 PHP 和 MySQL 同步。此类仅用于在迁移(例如从本地主机到 Web 服务器)中生成表或修改列,并且在更新、插入或读取表数据时永远不需要包含。
MVP:此类用于任何插入、更新或读取表的内容,或运行 MySQL 查询,并且应该在项目的整个项目或数据修改库中可访问。
Using the Code
MySQL 服务器连接
MVP 类包含一个有用的 static 函数,它将连接到下面描述的 MySQL 服务
<?php
Require ‘mvp.php’;
Mvp::autoconfig(‘localhost:3306’ , ‘myusername’ , ‘mypassword’ , ‘databasename’);
?>
上述函数将连接 MySQL,并为当前会话选择数据库。如果数据库不存在,它将创建一个名为第 4 个参数的数据库。
注意:在使用 entity 或 MVP 类之前,必须使用此函数。它们假定 PHP 应用程序已首先连接到 MySQL 服务器。
给初学者的注意事项:MySQL 连接应在每个页面开始,否则它们将由父级包含。因此,如果您将 autoconfig 函数放在起始代码的顶部,则整个项目将可以访问 MySQL。
实体类
使用 entity 类定义数据表非常简单,如下所述。
通过 [tablename] 构造函数参数实例化 entity 类后,entity 包含几个函数,它们可以委托 MySQL 列类型,如 varchar、text、int 等。
<?php
Require ‘mvp.php’;
$e = new entity(‘mytable’);
$e->target(“mysql”);
$e->varchar(“username” , 200);
$e->varchar(“password” , 100);
$e->text(“welcomemessage”);
$e->int(“totalvisists”);
$e->AsyncMySQL();
?>
AsyncMySQL:此函数将启动 PHP 和 MySQL 之间的查询,并将表定义转换为 SQL 查询。
重要的是,当您使用 MVP 或 entity 类时,RECORD_ID 将是您的记录主键,它会自动生成并且是 AUTO_INCREMNT,因此您无需在查询中再次定义它。
通过运行 AsyncMySQL 函数,将生成具有以下描述的表,或者如果存在,仍然会生成。entity 类还将考虑的另一个选项是,如果目标 MySQL 表的列少于新定义,它将自动生成。这将减少在客户网站从开发计算机更新后在 phpmyadmin 中操作 MySQL 表。
MVP 类
无论现有表还是通过 entity 生成的表,MVP 类都将表作为数据集连接到 PHP 脚本。为了使 MVP 更简单,数据集是原始 PHP 数组。同样,对于插入或更新记录,原始 PHP 数组作为参数的输入,因此可以非常简单地存储和读取数据,而无需浪费时间进行类型转换。
读取记录 vs. 读取记录集
Mvp 包含两个用于读取表数据的函数:select 和 selects。这两个函数之间的区别是可以预测的。Select 获取单个记录(通过 RECORD_ID),而 selects 可以通过实现下面示例中解释的 MySQL 条件来获取多条记录。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’); 
// select RECORD_ID = 1
$dataset = $mvp->select(1);
print_r($dataset); 
/* $dataset will be printed like:
Array(
    ‘username’ => ‘’ ,
    ‘password’ => ‘’,
    ...
);*/
$condition = array(
        ‘limit’ => 5 , ‘where’ => ‘RECORD_ID > 10’ , ‘order’ =>’RECORD_ID desc’,
        ‘column’ => ‘username , password’
);
$dataset = $mvp->selects($condition); 
print_r($dataset); 
/* $dataset will be printed like:
Array(
   [0] => array(
    ‘username’ => ‘’ ,
    ‘password’ => ‘’
   ),
   [0] => array(
    ‘username’ => ‘’ ,
    ‘password’ => ‘’
   ) 
);*/?>
如您所见,对于 selects 函数,应仅传递一个参数,它是一个可以包含 limit、column、where 和 order 四个参数的数组。但与 select 应该考虑的另一个区别是它的返回类型是数组。
在 selects 中,即使您获得 1 条记录,它也位于索引 0 的子数组中,当结果包含更多记录时,您可以使用 foreach 语句访问它们。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
foreach ($mvp->selects() as $q) {
        echo $q[‘username’] . “<br />”;
}?>
注意:mvp->selects(null) 将返回表中所有记录,并具有 MySQL 中定义的默认限制(通常是 1000 条记录和所有列)。
插入记录
从 PHP 数组、$_POST、$_GET 或 $_SESSION 插入数据是 MVP 的选项,可以通过数组类型进行 insert 和 update。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
$data = array(‘username’ => $_POST[‘username’] , ‘password’ => md5($_POST[‘password’]));
$unique_id = $mvp->insert($data);
If ($unique_id === false) echo “There was a problem”; else echo “Okay! New record id: $unique_id”; 
?>
如以上代码所述,可以通过与 MySQL 表具有相同列名的数组来插入表中的行。插入前的值将是 SQL 注入安全的。如果 $data 中的列名在表中不存在,它将不会被插入到表中。
如果插入行成功,将产生一个数字(RECORD_ID)作为 insert 函数的返回值,否则返回 false。
直接从用户帖子插入?!
MVP 表示您可以直接从 $_POST(用户浏览器发送的数据)插入表单数据。这可能不是一个非常安全的选择,但对于我们不将安全性和数据操作视为威胁的页面来说,这是可以发生的。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
If (!null($_POST[‘username’])) {
//$data = array(‘username’ => $_POST[‘username’] , ‘password’ => md5($_POST[‘password’])); 
// saving directly $_POST array, but if we want md5 password before we can:
$_POST[‘password’] = md5($_POST[‘password’]);
$unique_id = $mvp->insert($_POST); 
If ($unique_id === false) echo “There was a problem”; else echo “Okay! New record id: $unique_id”;
}
?>
<html>
<form method=”post”>
            <input type=”text” name=”username” />
            <input type=”password” name=”password” />
            <input type=”submit” /> 
</form>
</html> 
注意:在上面的代码中,我们直接保存了用户的输入,但在将其输入 mvp->insert 之前对密码进行了一些小的更改。
注意:null 函数是 mvp.php 的一个函数,它将检查一个变量是否包含任何内容。它将检查 $x==”” 和 $x==null 这两种类型。
注意:对于 $_SESSION 或 $_GET 全局数组,也可以实现同样的功能。
更新记录
更新记录与插入类似,但有 2 个区别
- Update 函数接受 2 个参数,第一个是 RECORD_ID,类型为int。
- 第二个参数数组的索引名应存在于列名中。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
$record = 10;
$data = array(‘username’ => $_POST[‘username’] , ‘password’ => md5($_POST[‘password’]));
$unique_id = $mvp->update($record , $data);
If ($unique === true ) {
        echo “Record updated”;
}?>
删除记录
可以通过 drop 函数通过获取 RECORD_ID 来删除记录。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
$result = $mvp->drop(20);
?>
计算记录数
获取表的总记录数并使用返回结果集
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
$result = $mvp->count();
?>
条目是否存在
可以通过比较某一列是否具有某个值来快速获取记录。这在您想要检查用户名和密码是否存在于您的表中时很有用。
<?php
Require ‘mvp.php’;
$mvp = new mvp(‘mytable’);
$result = $mvp->entryexists($column , $value);
$record_id = $mvp->whereexists($column , $value);
?>
获取表列
您可以通过 getcolumns() 函数获取 MVP 中的列名和类型列表。它返回表名和类型的数组。
MVP.PHP 函数
mvp.php 文件中有一系列有用的函数,当您需要它时,它们无需初始化即可访问。
<?php 
Require ‘mvp.php’;
// use this instead of $mvp->insert()
$x = ToDB(‘table name’ , array(‘name’=>’val’ , ‘name1’ => ‘val1’));
$x = FromDb(‘table name’ , array(/* condition of selects($condition)*/);
$x = GetNextRecord(“Table” , “RECORD_ID”);
?>
注意:GetNextRecord 函数可用于在特定记录之后获取下一个记录 RECORD_ID。由于有时会删除一些记录,因此下一个记录的主键可能增加超过 1。
关注点
使用此库很有用,因为它与框架无关,代码非常轻量级,并且可以轻松访问和迁移。
历史
- MVP 类的设计
- 用于定义表和迁移的 Entity 类的设计
- 文章于 2014/12/13 更新


