cristianp6/pdo-service-provider

为 Silex 提供的 PDO 数据库服务提供商,支持事务嵌套

v0.8.0 2015-08-26 14:00 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:31:28 UTC


README

一个简单的 Silex PDO 服务提供商

安装

将此包添加到 Composer 依赖配置中

php composer.phar require "cristianp6/pdo-silex-provider=~0.8"

用法

  • 仅配置一个数据库

使用 PdoServiceProvider silex 提供者

use Csanquer\Silex\PdoServiceProvider\Provider\PdoServiceProvider;
use Silex\Application;

$app = new Application();
$app->register(
    // you can customize services and options prefix with the provider first argument (default = 'pdo')
    new PdoServiceProvider('pdo'),
    array(
        'pdo.server'   => array(
            // PDO driver to use among : mysql, pgsql , oracle, mssql, sqlite, dblib
            'driver'   => 'mysql',
            'host'     => 'mysql',
            'dbname'   => 'rfactori',
            'port'     => 3306,
            'user'     => 'ger',
            'password' => 'GER',
        ),
        // optional PDO attributes used in PDO constructor 4th argument driver_options
        // some PDO attributes can be used only as PDO driver_options
        // see https://php.ac.cn/manual/fr/pdo.construct.php
        'pdo.options' => array(
            \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
        ),
        // optional PDO attributes set with PDO::setAttribute
        // see https://php.ac.cn/manual/fr/pdo.setattribute.php
        'pdo.attributes' => array(
            \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        ),
    )
);

// get PDO connection
$pdo = $app['pdo'];
  • 配置多个数据库
use Csanquer\Silex\PdoServiceProvider\Provider\PdoServiceProvider;
use Silex\Application;

$app = new Application();
$app->register(
    // use custom prefix for service and options
    // first PDO connection
    new PdoServiceProvider('pdo.db1'),
    array(
        // use previous custom prefix pdo.db1
        'pdo.db1.server' => array(
            // PDO driver to use among : mysql, pgsql , oracle, mssql, sqlite, dblib
            'driver'   => 'mysql',
            'host'     => '127.0.0.1',
            'dbname'   => 'db1',
            'port'     => 3306,
            'user'     => 'username',
            'password' => 'password',
        ),
        // optional PDO attributes used in PDO constructor 4th argument driver_options 
        'pdo.db1.options' => array(
            \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
        ),
        // optional PDO attributes set with PDO::setAttribute
        'pdo.db1.attributes' => array(
            \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        ),
    )
);

$app->register(
    // second PDO connection
    new PdoServiceProvider('pdo.db2'),
    array(
        'pdo.db2.server' => array(
            'driver' => 'sqlite',
            'path' => 'var/db/db2.sqlite',
        ),
    )
);

// get PDO connections
$db1Pdo = $app['pdo.db1'];
$db2Pdo = $app['pdo.db2'];

事务用法

  • 如何使用事务的基本示例
$sth = $app['pdo']->prepare( $sql );
try {
    $success = $app['pdo']->transaction(function() use ($sth) {
        return $sth->execute();
    });
    
    if($success) { 
        //committed 
    } else {
        //rollback
    }
    
} catch(\PDOExecption $e) {
    $app['pdo']->rollBack();
    $result = $e->getMessage();
}