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 更新