mk/database-connection-handler

PDO 封装,用于以更少的配置和更便捷的方式使用 MySQL 数据库

1.2.0 2021-03-18 15:47 UTC

This package is auto-updated.

Last update: 2024-09-18 23:55:24 UTC


README

Codacy Badge Latest Stable Version Latest Unstable Version License

DatabaseConnectionHandler 是一个简单的 PDO 封装。DatabaseConnectionHandler 允许通过 PDO 轻松访问 MySQL 数据库。它包括一个单例模式,可以在整个项目中只打开一个数据库连接,这样您的应用程序就不会因为处理太多数据库连接而出现问题。它还包括以下描述的使用模式。

需求

  • PHP 版本 5.3.1 或更高版本
  • 要连接的 MySQL 数据库(目前仅限于此)

安装

Composer

composer require mk/database-connection-handler

手动安装

  1. 只需将包含的文件复制到项目中的一个文件夹中,然后在您的 php 文件中需要使用它的任何地方包含 DatabaseConnectionHandler.php 即可。
  2. 为了提供您自己的数据库的连接凭证,请编辑文件 DataBaseConnection.php 并使用您自己的 MySQL 服务器信息填充占位符。

路线图/规范

  • 使用命名空间
  • PHP 7+ 兼容
  • 使用异常处理错误
  • 使用 ?:param 语法进行预处理语句
  • 欢迎提出问题或更多功能建议

使用方法

命名空间

使用 \MK\DB 作为命名空间。

打开连接/创建实例

DatabaseConnectionHandler.php 包含到 php 文件中后,您需要通过静态函数 getInstance() 获取当前实例。之后,您就可以查询数据库了。

查询数据库

创建 DatabaseConnectionHandler 实例后,您可以使用 query() 方法进行查询,无论是获取结果还是插入数据或其他操作。

query() 方法有两个参数

  • $query 是 SQL 查询字符串。
  • $arguments 是一个数组,包含查询字符串的特定参数。此参数也可以为空。

带有参数的查询构建方式类似于您在 PDO 中使用的任何查询,即使用 "?" 来通知 DatabaseConnectionHandler 在 $arguments 数组中有一个与占位符匹配的参数。例如:

use \MK\DB;

$dbc_handler = DatabaseConnectionHandler::getInstance();

$searched_name = "Jack";
$searched_age = 21;

$result = $dbc_handler->query("INSERT INTO my_table (name, age) VALUES (?, ?);", array($searched_name, $searched_age));

这种预处理语句的行为与纯 PDO 中的命名占位符类似

use \MK\DB;

$dbc_handler = DatabaseConnectionHandler::getInstance();

$searched_name = "Jack";
$searched_age = 21;

$result = $dbc_handler->query("INSERT INTO my_table (name, age) VALUES (:name, :age);", array(":name" => $searched_name, ":age" => $searched_age));

从查询中获取结果

查询每个 query() 方法调用都会返回一个 DatabaseResult 对象。此对象包含所有查询数据以及查询所选的行和最后的插入 ID(如果适用)。

DatabaseResult 具有以下方法

  • getSelectedRows():如果适用,返回查询中找到的行。
  • nextRow():如果适用,返回查询的下一行。该行是一个关联数组,其中包含查询列作为键。
  • fetchAll():与只返回查询的下一行不同,此方法返回所有剩余的行,并将它们打包到一个数组中。
  • getLastInsertID():如果适用,返回最后的插入 ID。

以下是如何使用 DatabaseResult 对象的简单示例:

use \MK\DB;

$dbc_handler = DatabaseConnectionHandler::getInstance();

$searched_name = "Jack"
$searched_age = 21

$result = $dbc_handler = $dbc_handler->query("INSERT INTO my_table (name, age) VALUES (?, ?);", array($searched_name, $searched_age));

//Last insert id
$last_insert_id = $result->getLastInsertID();

//Loop through result
$result2 = $dbc_handler->query("SELECT id, name, age FROM my_table;", array());
foreach($result2->fetchAll() as $row) {
    print_r($row);
}

//Get single (estimated) result
$result3 = $dbc_handler->query("SELECT id, name, age FROM my_table WHERE name = ?;", array($searched_name));
if($result3->getSelectedRows() > 0) { //Is there an result?
    $searched_row = $result3->nextRow();
}