Php 在Silex中动态添加到DBAL的连接

Php 在Silex中动态添加到DBAL的连接,php,doctrine,silex,dbal,Php,Doctrine,Silex,Dbal,我正在使用Silex框架编写一个PHP应用程序。我正在使用条令服务提供商,我可以正常打开连接,如下所示: $app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'dbs.options' => array ( 'localhost' => array( 'driver' => 'pdo_mysql', 'host'

我正在使用Silex框架编写一个PHP应用程序。我正在使用条令服务提供商,我可以正常打开连接,如下所示:

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
        'localhost' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'localhost',
            'dbname'    => 'test',
            'user'      => 'root',
            'password'  => 'root',
            'charset'   => 'utf8',
        )
    ),
));
那很好用。现在我想在代码中添加另一个数据库连接。我知道我可以在dbs.options中添加另一个元素,但我希望以后在控制器中这样做(因为不同的控制器将使用不同的数据库连接)

可能吗?我想我可以使用类似于
DriverManager::getConnection($options,$config,$manager)的东西但是可能有更好的方法

谢谢

$conn = DriverManager::getConnection($params, $config);
这是生成新连接的原始代码,所以您编写的代码是可以的

链接:

这是生成新连接的原始代码,所以您编写的代码是可以的


链接:

您可以使用与Silex捆绑的
DoctrineServiceProvider
配置多个db连接

用配置数组替换
db.options
,其中键是连接名称和值配置选项

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
        'mysql_read' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'mysql_read.someplace.tld',
            'dbname'    => 'my_database',
            'user'      => 'my_username',
            'password'  => 'my_password',
            'charset'   => 'utf8',
        ),
        'mysql_write' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'mysql_write.someplace.tld',
            'dbname'    => 'my_database',
            'user'      => 'my_username',
            'password'  => 'my_password',
            'charset'   => 'utf8',
        ),
    ),
));
访问控制器中的多个连接:

$app->get('/blog/{id}', function ($id) use ($app) {
    $sql = "SELECT * FROM posts WHERE id = ?";
    $post = $app['dbs']['mysql_read']->fetchAssoc($sql, array((int) $id));

    $sql = "UPDATE posts SET value = ? WHERE id = ?";
    $app['dbs']['mysql_write']->executeUpdate($sql, array('newValue', (int) $id));

    return  "<h1>{$post['title']}</h1>".
            "<p>{$post['body']}</p>";
});
$app->get('/blog/{id}',函数($id)use($app){
$sql=“从id=?”的帖子中选择*;
$post=$app['dbs']['mysql_read']->fetchAssoc($sql,数组((int)$id));
$sql=“UPDATE posts SET value=?其中id=?”;
$app['dbs']['mysql_write']->executeUpdate($sql,array('newValue',(int)$id));
返回“{$post['title']}”。
“{$post['body']}

”; });

来源:

您可以使用与Silex捆绑的
DoctrineServiceProvider
配置多个db连接

用配置数组替换
db.options
,其中键是连接名称和值配置选项

$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
    'dbs.options' => array (
        'mysql_read' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'mysql_read.someplace.tld',
            'dbname'    => 'my_database',
            'user'      => 'my_username',
            'password'  => 'my_password',
            'charset'   => 'utf8',
        ),
        'mysql_write' => array(
            'driver'    => 'pdo_mysql',
            'host'      => 'mysql_write.someplace.tld',
            'dbname'    => 'my_database',
            'user'      => 'my_username',
            'password'  => 'my_password',
            'charset'   => 'utf8',
        ),
    ),
));
访问控制器中的多个连接:

$app->get('/blog/{id}', function ($id) use ($app) {
    $sql = "SELECT * FROM posts WHERE id = ?";
    $post = $app['dbs']['mysql_read']->fetchAssoc($sql, array((int) $id));

    $sql = "UPDATE posts SET value = ? WHERE id = ?";
    $app['dbs']['mysql_write']->executeUpdate($sql, array('newValue', (int) $id));

    return  "<h1>{$post['title']}</h1>".
            "<p>{$post['body']}</p>";
});
$app->get('/blog/{id}',函数($id)use($app){
$sql=“从id=?”的帖子中选择*;
$post=$app['dbs']['mysql_read']->fetchAssoc($sql,数组((int)$id));
$sql=“UPDATE posts SET value=?其中id=?”;
$app['dbs']['mysql_write']->executeUpdate($sql,array('newValue',(int)$id));
返回“{$post['title']}”。
“{$post['body']}

”; });

来源:

这不是被问到的问题。这不是被问到的问题。