繁体   English   中英

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

[英]Add connection to DBAL dynamically in Silex

我正在使用Silex框架编写PHP应用程序。 我使用的是Doctrine Service Provider,因此可以正常打开连接,如下所示:

$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);

这是生成新连接的原始代码,所以您写的没关系

链接: http//docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html

您可以使用Silex随附的DoctrineServiceProvider配置多个数据库连接。

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>";
});

资料来源: http : //silex.sensiolabs.org/doc/providers/doctrine.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM