webfiori/ph-mysql

此包已被弃用,不再维护。作者建议使用 webfiori/database 包。

PHP 库,用于构建 MySQL 数据库查询。

1.4.2 2020-06-24 15:15 UTC

This package is auto-updated.

Last update: 2022-02-27 21:31:10 UTC


README

面向对象的 PHP 库,用于构建 MySQL 数据库模式和查询。

68747470733a2f2f7472617669732d63692e6f72672f757365726e616e652f70684d7973716c2e7376673f6272616e63683d6d6173746572 68747470733a2f2f636f6465636f762e696f2f67682f757365726e616e652f70684d7973716c2f6272616e63682f6d61737465722f67726170682f62616467652e737667 68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f757365726e616e652f70684d7953716c2e7376673f6c6162656c3d6c6174657374 GitHub All Releases 68747470733a2f2f696d672e736869656c64732e696f2f656e64706f696e742e7376673f75726c3d687474707325334125324625324677656266696f72692e636f6d2532467825324661706973253246736869656c64732d6765742d646f6e746174652d626164676574

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();
}

获取原始数据

将查询结果映射到类对象

连接两个表