vertilia/pdo-wrap

PDO 包装库,用于简化基本的数据库操作

v1.1.0 2023-06-10 16:04 UTC

This package is auto-updated.

Last update: 2024-09-10 19:04:23 UTC


README

PDO (PHP 数据对象) 是 PHP 应用程序与数据库交互的标准接口。尽管它为大量提供者提供了完整的数据库相关功能,但某些基本操作似乎缺乏简洁性。

此包为从 PHP 代码中与基于 PDO 的数据库连接工作添加了一些形式上的简洁和优雅。

它具有以下功能:

  • 具有标准占位符形式的类型占位符,大多数 IDE 可以识别,
  • 透明的类型参数绑定,允许简单的链式操作。

示例

使用 PDO 获取具有入参数的记录集的快速示例

<?php

use PDO;

$pdo = new PDO('sqlite::memory:');
$sth = $pdo->prepare("SELECT name, join_date, acl FROM users WHERE acl IN(:a1,:a2)");
$sth->bindValue(':a1', 9, PDO::PARAM_INT);
$sth->bindValue(':a2', 10, PDO::PARAM_INT);
$sth->execute();
$result = $sth->fetchAll();

是的,没有标准 PDO 方法可以在指定列表时自动展开数组...

比较与 PdoWrap 相同的操作

<?php

use PDO;
use Vertilia\PdoWrap\PdoWrap;

$pdo_wrap = new PdoWrap('sqlite::memory:');
$result = $pdo_wrap->queryFetchAll(
    "SELECT name, join_date, acl FROM users WHERE acl IN(:acls)",
    [':acls[i]' => [9, 10]]
);

一个示例中实现了 PdoWrap 的两个主要概念。首先,我们在参数列表中通过添加 [i] 后缀提供了类型信息。其次,由于 [i] 后缀表示对应的值必须表示为整数列表,因此 :acls 命名参数被展开以包含数组中的多个元素。

注意: :acls 占位符采用标准的 PDO 命名参数形式,它将被 IDE 自动识别为此类。

下面是可用的完整类型列表。

类型参考

PdoWrap 扩展 PDO 类并添加了 3 个辅助方法,您将每天都会用到

  • queryFetchAll()
    用于执行带有类型占位符的 SELECT 语句并返回整个记录集(与正常的序列 PDO::prepare / PDOStatement::bindValue × n / PDOStatement::execute / PDOStatement::fetchAll 相同),
  • queryFetchOne()
    用于执行带有类型占位符的 SELECT 语句并返回第一条记录(与正常的序列 PDO::prepare / PDOStatement::bindValue × n / PDOStatement::execute / PDOStatement::fetch / PDOStatement::closeCursor 相同),
  • queryExecute()
    用于执行带有类型占位符的 DML 语句(与正常的序列 PDO::prepare / PDOStatement::bindValue × n / PDOStatement::execute / PDOStatement::rowCount 相同)。

所有这些方法都接受一个 SQL 语句作为其第一个参数,该语句具有问号占位符(如 ?)或命名占位符(如 :name)。第二个参数是一个数组,其中包含用于相应占位符的值。可能还有其他参数表示 PDO 获取模式,它们将被传递到相应的 PDOStatement::fetchAll()PDOStatement::fetch() 方法。

对于问号占位符,无法提供类型,因此值存储在一个数字数组中,就像在标准 PDO 形式 PDO::prepare()->execute() 中一样。保留此形式是为了兼容性。

对于命名占位符,值通过关联数组传递,其中键对应于 SQL 语句中占位符的名称,但具有类型指示后缀,如 :acls[i]

类型指示符是附加到传递给相应 query*() 方法的参数列表中参数名称的后缀,并且可能采用两种形式之一,要么是尖括号(如 <TYPE>),用于指定指定类型的 单个 值,要么是方括号(如 [TYPE]),用于指定指定类型的 数组 值。

以下类型指示符可用

一些示例

<?php

$db = new PdoWrap($db_dsn, $db_user, $db_pass, $db_options);

$admins_rows = $db->queryFetchAll('SELECT * FROM users WHERE acl >= ?', [90]);

$admins_list = $db->queryFetchAll(
    'SELECT id, name FROM users WHERE acl >= :acl',
    [':acl<i>' => 90],
    PDO::FETCH_KEY_PAIR
);

$admins_count = $db->queryFetchOne(
    'SELECT COUNT(*) FROM users WHERE acl >= :acl',
    [':acl<i>' => 90],
    PDO::FETCH_COLUMN
);

$admins_updated = $db->queryExecute(
    'UPDATE users SET connected = :conn WHERE acl >= :acl',
    [
        ':acl<i>' => 90,
        ':conn<b>' => false,
    ]
);

请查看 /tests/ 以获取更多示例。

更多功能即将推出,请保持关注 ;-)