webfiori / ph-mysql
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5
This package is auto-updated.
Last update: 2022-02-27 21:31:10 UTC
README
面向对象的 PHP 库,用于构建 MySQL 数据库模式和查询。
API 文档
此库是 WebFiori 框架 的一部分。要访问库的 API 文档,可以访问以下链接: https://webfiori.com/docs/phMysql .
功能
- 使用 PHP 创建 MySQL 数据库表结构的能力。
- 以简单方式创建 MySQL 查询。
- 连接到 MySQL 数据库引擎(需要 mysqli 扩展)。
- 执行 MySQL 查询并将查询结果映射到对象(如 ORM)。
- 在将数据发送到 DBMS 之前验证数据。
支持的 PHP 版本
该库支持从版本 5.6 到版本 7.4 的所有版本。
安装
简单的方法是从 发布 手动下载最新的版本。
想法
该库的整体思路如下,数据库中的每个表都表示为类 'MySQLTable' 的一个实例。该实例与类 'MySQLQuery' 的一个实例相关联。类 'MySQLQuery' 的主要目的是构建可以执行并从表中获取数据的各种类型的查询。
类 'MySQLink' 用于连接到 MySQL 数据库并执行类 'MySQLQuery' 的任何实例。除此之外,它还用于访问可以是从执行 'select' 查询得到的数据。
创建数据库表
使用该库的第一步是创建您的数据库表。正如我们之前所说的,每个表都表示为类 MySQLTable 的一个实例。我们也说过,这个类的实例与类 MySQLQuery 相关联。
假设我们想要创建一个具有以下结构的数据库表
- 表名:
users_information
- 表列
- 列名:
user_id
. 类型:int
. 大小:4
. 主键。 - 列名:
username
. 类型:varchar
. 大小25
. - 列名:
password
. 类型:varchar
. 大小:64
. - 列名:
created_on
。类型:时间戳
,默认值为current_timestamp
。 - 列名:
last_updated
。类型:datetime
。可以为null
。
创建此类表的步骤如下
$query = new MySQLQuery('users_information'); $query->getTable()->addColumns([ 'user-id'=>[ 'datatype'=>'int', 'size'=>4, 'is-primary'=>true ], 'username'=>[ 'datatype'=>'varchar', 'size'=>25 ], 'password'=>[ 'datatype'=>'varchar', 'size'=>64 ], 'created-on'=>[ 'datatype'=>'timestamp', 'default'=>'current_timestamp' ], 'last-updated'=>[ 'datatype'=>'datetime', 'is-null'=>true ] ]);
这将构建表的基本结构。要获取创建表的SQL查询,我们可以简单地这样做
$query->createTable(); // display the constructed query. print_r('<pre>'.$query.'</pre>);
构建查询
MySQLQuery
类的核心目的是构建SQL查询。该类有许多预定义的方法,可以用来构建不同类型的查询以在数据库上执行不同的操作。最重要的操作包括
- 插入。
- 更新。
- 删除。
- 读取(或选择)。对于每个操作,类中都有一个对应的方法。
插入
MySQLQuery::insertRecord()
方法用于创建一个insert
查询。该方法接受一个关联数组。数组的键是列名,键的值是要插入的值。
$query->insertRecord([ 'user-id'=>99, 'username'=>'MySuperHeroIsYou', 'password'=>'f5d44b6d4a7d91821d602d03c096280e86888fa16cf9c27c540bbc2fd4e73932', 'created-on'=>date('Y-m-d H:i:s') ]);
更新
MySQLQuery::updateRecord()
方法用于创建一个update
查询。该方法接受4个参数。其中两个是可选的。第一个参数是一个关联数组。数组的键是列名,键的值是新的值。第二个参数也是一个关联数组,其中包含更新条件列(即where
部分)。
$query->updateRecord([ 'username'=>'MySuperHeroIsYou', 'password'=>'f5d44b6d4a7d91821d602d03c096280e86888fa16cf9c27c540bbc2fd4e73932', ], [ 'user-id'=>99 ]);
删除
MySQLQuery::deleteRecord()
方法用于创建一个delete
查询。该方法接受一个关联数组,其中包含删除条件列(即删除查询的where
部分)。
$query->deleteRecord([ 'user-id'=>99 ]);
连接到MySQL数据库
MySQLLink
类用于连接到MySQL数据库。它作为mysqli
扩展的包装器。它还增加了额外的功能,例如将查询结果映射到类对象的能力。要连接到数据库,我们必须创建该类的新实例。该类的构造函数接受4个参数
- 数据库主机地址。
- 数据库用户名。
- 密码。
- 端口号。在大多数情况下,第一个参数是
localhost
,除非数据库托管在其他地方。用户名是具有数据库访问权限的用户。端口号是可选的。如果没有提供,默认值为3306
。如果建立了到数据库的连接,我们必须使用方法MySQLLink::setDB()
选择数据库。
以下代码演示了如何连接到数据库。它还检查连接错误。
use phMysql\MySQLLink; $conn = new MySQLLink('localhost', 'root', '123456'); if($conn->getErrorCode() != 0) { //connection error. Show error message echo $conn->getErrorMessage(); } else { //connected. Select database now. if($conn->setDB('my_database')) { //connected. Now can execute quires. } else { //unable to set database echo $conn->getErrorMessage(); } }
执行MySQL查询
连接到数据库后,我们可以开始在其上运行查询。如前所述,MySQLQuery
类用于构建我们的查询。为了执行它们,我们必须使用MySQLLink
类。具体来说,是使用方法MySQLLink::executeQuery()
。该方法将返回一个布尔值。如果查询成功执行,则方法将返回true。如果失败,则方法将返回false。
假设我们已经建立了数据库连接,并且我们有一个具有users_information
表的查询类。以下代码示例展示了如何执行插入查询。
$query->insertRecord([ 'user-id'=>99, 'username'=>'MySuperHeroIsYou', 'password'=>'f5d44b6d4a7d91821d602d03c096280e86888fa16cf9c27c540bbc2fd4e73932', 'created-on'=>date('Y-m-d H:i:s') ]); if($conn->executeQuery($query)) { //query executed without errors } else { //something went wrong. Show error message echo $conn->getErrorMessage(); }