commandstring / pdo
此包已被 废弃 并不再维护。未建议替代包。
具有额外功能的PDO驱动程序
v3.1.1
2023-02-11 17:07 UTC
Requires
- commandstring/utils: ^1.3
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"]);