小编Sam*_*ler的帖子

如何在 slim 4 中设置和注入多个 PDO 数据库连接?

我可以创建一个实例PDO并成功注入它。我PDO::class直接定义了并将其注入到构造函数中__construct(PDO $pdo)。我需要类似的东西PDO1::class并按PDO2::class如下方式注入它:__construct(PDO1 $pdo1, PDO2 $pdo2)但这显然不起作用。只有一个PDO类,我需要做的是它的 2 个具有不同数据库凭据的实例。
最好的方法是什么?

我通过这样的 PDO 设置了一个数据库定义,它可以工作:

文件: dependencies.php

use DI\ContainerBuilder;
use Psr\Container\ContainerInterface;

return function (ContainerBuilder $containerBuilder) {
    $containerBuilder->addDefinitions([
        PDO::class => function (ContainerInterface $c) {
            $dbSettings = $c->get('settings')['db1'];
            $dsn = 'mysql:host=' . $dbSettings['host'] . ';dbname=' . $dbSettings['dbname'];
            $options = [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES => false,
            ];
            return new PDO($dsn, $dbSettings['user'], $dbSettings['pass'], $options);
        },
    ]);
};
Run Code Online (Sandbox Code Playgroud)

文件: index.php

... …
Run Code Online (Sandbox Code Playgroud)

php pdo slim php-di slim-4

4
推荐指数
1
解决办法
2466
查看次数

如果未定义数组元素,则设置null(默认值)

我有一个填充对象的函数.

public static function populateObj($data) {
    $obj = new Obj();
    $obj->setVal1($data['val1']);
    $obj->setVal2($data['val2']);
    $obj->setId($data['id']);
    return $obj;
}
Run Code Online (Sandbox Code Playgroud)

如果使用参数给出所有值,则$data它可以正常工作.但如果缺少某些东西,则会抛出错误.
是否有更短,更容易或更好的方法设置null为默认值:

$data['val1'] ? $obj->setVal1($data['val1']) : $obj->setVal1(null);
...
Run Code Online (Sandbox Code Playgroud)

php

2
推荐指数
1
解决办法
54
查看次数

标签 统计

php ×2

pdo ×1

php-di ×1

slim ×1

slim-4 ×1