biohzrdmx/datum-php

简单的(就像非常简单)数据库抽象层

1.0 2023-02-10 22:26 UTC

This package is auto-updated.

Last update: 2024-09-11 03:41:54 UTC


README

简单的(就像非常简单)数据库抽象层

基本用法

首先使用 Composer 需要 biohzrdmx/datum-php

然后创建一个 Database 实例,调用构造函数需要一个 AdapterInterface 实现实例;包含两个适配器:MySQLAdapterSQLiteAdapter,它们都扩展自 PDOAdapter

$options = [
  'host' => getenv('TEST_DB_HOST') ?: 'localhost',
  'name' => getenv('TEST_DB_NAME') ?: 'test',
  'user' => getenv('TEST_DB_USER') ?: 'root',
];
$adapter = new MySQLAdapter($options);
$database = new Database($adapter);

或使用 SQLite

$options = [
  'file' => 'path/to/database.sqlite'
];
$adapter = new SQLiteAdapter($options);
$database = new Database($adapter);

简单查询

要运行简单查询,请使用 query 方法

$database->query("CREATE TABLE test ...");
$database->query("DROP TABLE IF EXISTS test");

对于 INSERT 语句,您可以使用 lastInsertId 方法轻松获取自动递增 ID

$database->query("INSERT INTO ...");
$id = $database->lastInsertId();

如果您需要执行更复杂的事情,可以将 Closure 作为第三个参数传递,以直接操作 PDOStatement 对象

$params = [4];
$row = $database->query("SELECT * FROM test WHERE id = ?", $params, function($stmt) {
  return $stmt->fetch();
});

选择数据

要从数据库中检索数据,请使用 select 方法

$rows = $database->select("SELECT * FROM test");

如果需要传递参数,请传递一个 array 作为第二个参数

$params = ['Draft'];
$rows = $database->select("SELECT * FROM test WHERE status = ?", $params);

也支持命名参数

$params = ['status' => 'Draft'];
$rows = $database->select("SELECT * FROM test WHERE status = :status", $params);

要检索单行,请使用 first 方法

$params = ['id' => 2];
$row = $database->first("SELECT * FROM test WHERE id = :id", $params);

您还可以使用 scalar 方法查询单个、标量值

$count = $database->scalar("SELECT count(*) FROM test");

也可以通过 chunk 方法进行分块

$params = ['Published'];
$database->chunk(100, "SELECT id, title FROM test WHERE status = ?", $params, function($rows) {
  foreach ($rows as $row) {
    // Do something with the row data
  }
});

只需传递每块行数,查询,其参数作为一个 array,以及一个将为每个块执行的 Closure,它接收 $rows

事务

支持自动事务,如果查询生成错误,事务将自动回滚,否则将提交。

要使用它们,请调用 transaction 方法

$database->transaction(function($database) {
  $params = ['Draft', 2];
  $database->query("UPDATE test SET status = ? WHERE id = ?", $params);
});

传递一个 Closure,在它内部,您将使用它接收的 $database 参数调用您的查询。

您还可以使用 begincommitrollback 方法手动进行事务

$params = ['Published', 3];
try {
  $database->begin();
  $database->query("UPDATE test SET status = ? WHERE id = ?", $params);
  $database->commit();
} catch (Exception $e) {
  $database->rollback();
}

许可

此软件根据 MIT 许可证发布。

版权 © 2023 biohzrdmx

特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人免费处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供软件的人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和非侵权保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任基于合同、侵权或其他方式,源于、因或与软件或软件的使用或其他交易有关。

致谢

主要编码人员: biohzrdmx github.com/biohzrdmx