knj/d2o

维护者

详细信息

github.com/KNJ/d2o

源代码

问题

0.5.0 2016-05-10 06:10 UTC

This package is auto-updated.

Last update: 2024-09-17 08:58:54 UTC


README

Packagist Pre Release Build Status

D2O-chan

安装

使用 Composer。

composer require knj/d2o

从 PDO 使用 D2O

如果使用 D2O,您可以使用 PDO 和 PDOStatement 通过方法链使用单个语句

$d2o = new Wazly\D2O($dsh, $username, $password);

$sql = 'SELECT * FROM users WHERE id = :id'

$row = $d2o
    ->state($sql)
    ->run([':id' => 3])
    ->pick();

否则需要将 $dbh 作为 PDO,将 $stmt 作为 PDOStatement,至少需要 3 个语句

$dbh = new PDO($dsh, $username, $password);

$sql = 'SELECT * FROM users WHERE id = :id';

$stmt = $dbh->prepare($sql);
$stmt->execute([':id' => 3]);
$row = $stmt->fetch(PDO::FETCH_OBJ);

方法

state ( string $statement )

D2O::state() 应由 D2O 直接调用。它与 PDO::prepare() 几乎相同,但返回 D2O 实例本身。

$d2o->state($sql); // returns $d2o

bind ( [ array $parameters [, string $bind_type = 'value' ] ] )

D2O::bind() 应在 D2O::state() 之后调用。它与 PDOStatement::bindValue() 类似,但返回 D2O 实例。

$d2o->state($sql)
    ->bind([
        ':role' => $role,
        ':limit' => [$limit, 'int'],
    ]); // returns $d2o

run ( [ array $parameters [, string $bind_type = 'value' ] ] )

D2O::run() 应在 D2O::state() 之后调用。它与 PDOStatement::execute() 类似,但返回 D2O 实例。

$d2o->state($sql)
    ->bind([
        ':role' => $role,
        ':limit' => [$limit, 'int'],
    ])
    ->run(); // returns $d2o

$d2o->state($sql)
    ->run([
        ':role' => $role,
        ':limit' => [$limit, 'int'],
    ]); // the same as the above

pick ( string $fetch_style )

D2O::pick() 应在 D2O::run() 之后调用。它与 PDOStatement::fetch() 几乎相同。它不返回实例,而是查询结果。

$row = $d2o->state($sql)
    ->run([
        ':role' => $role,
        ':limit' => [1, 'int'],
    ])
    ->pick(); // recommended if the number of rows is supposed to be 1

$result = $d2o->state($sql)
    ->run([
        ':role' => $role,
        ':limit' => [$limit, 'int'],
    ]); // recommended if the number of rows is supposed to be 2 or more

$row1 = $result->pick();
$row2 = $result->pick();
$row3 = $result->pick();

format ( string $fetch_style )

D2O::format() 应在 D2O::run() 之后调用。它与 PDOStatement::fetchAll() 几乎相同。它不返回实例,而是查询结果。

$rows = $d2o->state($sql)
    ->run([
        ':role' => $role,
        ':limit' => [$limit, 'int'],
    ])
    ->format();

getStatement()

D2O::getStatement() 在 D2O 中返回 PDOStatement 对象。例如,您可以使用 PDOStatement::fetchAll() 而不是 D2O::format()

$rows = $d2o->state($sql)->run()->getStatement()->fetchAll();

D2O 和 PDO 的区别

PDOStatement 位于 D2O 内部

使用 PDO 时,需要一个额外的变量来包含 PDOStatement 实例。然而,D2O 将 PDOStatement 作为其属性,因此可以提供方法链。

连续插入示例:

$d2o->state('INSERT INTO items(name, price) VALUES (:name, :price)')
    ->run(['name' => 'pencil', 'price' => 20])
    ->run(['name' => 'eraser', 'price' => 60])
    ->run(['name' => 'notebook', 'price' => 100]);

数据绑定

D2O 在在占位符上绑定值时节省了编码

$d2o->bind([
    'role' => 'editor',  // ':role' => 'editor', PDO::PARAM_STR
    'limit' => 20,       // ':limit' => 20, PDO::PARAM_INT
    'hash' => '6293',    // ':hash' => '6293', PDO::PARAM_STR
    'id' => [36, 'str'], // ':id' => 36, PDO::PARAM_STR
]);
  • 您不必使用冒号
  • 当值为字符串、整数或 null 时,不必使用 PDO_PARAM_*
  • 您可以更简洁地指定数据类型,例如 'str' 而不是 PDO::PARAM_STR

并且 D2O 从不调用 PDOStatement::bindParam()