此包已被 废弃 并不再维护。未建议替代包。

具有额外功能的PDO驱动程序

v3.1.1 2023-02-11 17:07 UTC

This package is auto-updated.

Last update: 2023-05-31 00:24:42 UTC


README

CommandString/Pdo

利用魔法使PDO更加容易

安装

composer require commandstring/pdo

创建连接

手动创建

$driver = (new Driver)
	->withUsername("root")
	->withPassword("password")
	->withDatabase("database")
	->withHost("127.0.0.1")
	->withPort(3306)
	->withPrefix(Driver::PREFIX_MYSQL)
	->connect()
;

您可以使用 Driver::setDsnProp 或 Driver::with{insert dsn prop name here} 来设置额外的dsn值

使用数据库预定义的 createDriver 方法

目前我只提供 mysql 和 postgres 的特定方法

$driver = Driver::createMySqlDriver("root", "password", "database")->connect();
$driver = Driver::createPostgresSqlDriver("root", "password", "database")->connect();

// you can set the host and port in the last two parameters but they default to localhost and the default port of the service

执行查询

$rows = $driver->query("SELECT * FROM table")->fetchAll(PDO::FETCH_ASSOC);

驱动程序将内部存储 PDOStatement 并检测您调用的方法是否存在于 PDOStatement 或 PDO 中,并相应地调用其中一个实例。 幸运的是,这两个类之间没有相同的方法名

准备语句

$driver->prepare("SELECT * FROM table WHERE column = :column");
$driver->bindValue("column", "value");
$driver->execute();
$rows = $driver->fetchAll(PDO::FETCH_ASSOC);

单例构造函数参数

如果您将 Driver 用作单例参数设置为 true,则新实例将作为类的静态属性存储,可以从任何地方通过 get 方法调用。您还可以从 Driver 静态调用 PDO/PDOStatement 方法,并且它们的工作方式类似于 $driver->methodName

(new Driver(true))
	->withUsername("root")
	->withPassword("password")
	->withDatabase("database")
	->withHost("127.0.0.1")
	->connect()
;

function getRowWhereIdIs(int $id, int $fetch_type = PDO::FETCH_ASSOC): mixed
{
	Driver::prepare("SELECT * FROM table WHERE id = :id");
	Driver::bindValue("id", $id);
	Driver::execute();
	return Driver::fetch($fetch_type);
}

$row = getRowWhereIdIs(20);

构建语句

选择

$driver->select()
    ->from("table")
    ->columns(["column" => "column_alias_name"], "column2")
    ->orderBy("column", "ASC")
    ->limit(20)
    ->offset(30)
;

插入

$driver->insert()
    ->into("table")
    ->value("column", "value")
    ->values(["column2" => "value", "column3" => "value"])
;

更新

$driver->update()
    ->table("table")
    ->set("column", "newValue")
    ->where("column", "=", "value")
;

删除

$driver->delete()
    ->from("table")
    ->where("column", "=", "value")

使用 where 方法

// ...
->where("column", "=", "value")
->where("column", "IN", [1, 5, "hi"])
->where("column", "IN", [(new Select($driver))->from("table")->columns("column")])
->where("column", "BETWEEN", [0, 5])
->whereOr("column", "=", 5)
->whereNot("column", "=", 10)

创建可存储语句

创建 storableStatement 实例

$storableStmt = $driver->storableStatements->create("accounts.getByUsername")

创建要存储的语句

$storableStmt->setStatement($driver->select()->from("accounts")->columns("name", "id"));

设置 before 处理器(可选)

$storableStmt->setBeforeHandler(function (Select $statement, string $name): Select
{
    return $statement->where("name", "=", $name);
});

第一个参数是传递给 setStatement 方法的语句。您可以定义在执行语句时可以设置的参数 稍后详细介绍

设置之后处理器(可选)

$storableStmt->setAfterHandler(function (PDOStatement $statement)): Account
{
    $results = $statement->fetch(PDO::FETCH_OBJ);

    return new Account($results->name, $results->id);
}

执行存储语句

$driver->storableStatements->execute("accounts.getByUsername", ["Command_String"]);