schema-keeper / executor
与 PostgreSQL 存储过程的简单交互
v1.1.0
2019-06-27 13:42 UTC
Requires
- php: >=5.6
- ext-pdo: *
- ext-pdo_pgsql: *
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^5.0||^6.0||^7.0||^8.0
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-09-28 02:07:27 UTC
README
Executor 有助于执行 PL/pgSQL 存储过程。
示例
异常处理
假设存储过程抛出异常
CREATE OR REPLACE FUNCTION public.test_function()
RETURNS VOID
LANGUAGE plpgsql
AS $function$
BEGIN
RAISE EXCEPTION 'MyException' USING HINT = 'TestHint';
END;
$function$;
通过 Executor 调用它的方式
<?php use SchemaKeeper\Tools\Executor\Fetcher\SingleColumn; use SchemaKeeper\Tools\Executor\Exception\RaisedException; try { $executor->execFunc('public.test_function', [], new SingleColumn()); } catch (RaisedException $e) { echo $e->getExceptionName().' '.$e->getExceptionHint(); }
在 catch
块中的输出为: "MyException TestHint"
获取
假设存储过程返回一个表
CREATE OR REPLACE FUNCTION public.test_function(_dummy TEXT)
RETURNS TABLE(param1 INTEGER, param2 TEXT)
LANGUAGE plpgsql
AS $function$
BEGIN
param1 = 1;
param2 = 'One';
RETURN NEXT;
param1 = 2;
param2 = 'Two';
RETURN NEXT;
RETURN;
END;
$function$;
Executor 提供了三种不同的获取器
<?php use SchemaKeeper\Tools\Executor\Fetcher\SingleColumn; use SchemaKeeper\Tools\Executor\Fetcher\SingleRow; use SchemaKeeper\Tools\Executor\Fetcher\MultipleRow; $params = [':dummy' => 'test']; $result1 = $executor->execFunc('public.test_function', $params, new SingleColumn()); $result2 = $executor->execFunc('public.test_function', $params, new SingleRow()); $result3 = $executor->execFunc('public.test_function', $params, new MultipleRow()); var_dump($result1, $result2, $result3);
var_dump
将输出
int(1)
array(2) {
'param1' =>
int(1)
'param2' =>
string(3) "One"
}
array(2) {
[0] =>
array(2) {
'param1' =>
int(1)
'param2' =>
string(3) "One"
}
[1] =>
array(2) {
'param1' =>
int(2)
'param2' =>
string(3) "Two"
}
}
初始化
<?php use SchemaKeeper\Tools\Executor\Connection\PDOProxy; use SchemaKeeper\Tools\Executor\ErrorHandler; use SchemaKeeper\Tools\Executor\Executor; $dsn = 'pgsql:dbname=schema_keeper;host=localhost'; $pdo = new PDO($dsn, 'postgres', 'postgres', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); $conn = new PDOProxy($pdo); $errorHandler = new ErrorHandler(); $executor = new Executor($conn, $errorHandler);
贡献
有关如何为 SchemaKeeper 贡献的信息,请参阅 CONTRIBUTING.md