Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter 4可以在变量或任何其他选项中指定db_名称(Database.php)_Php_Database_Codeigniter_Connection_Codeigniter 4 - Fatal编程技术网

Codeigniter 4可以在变量或任何其他选项中指定db_名称(Database.php)

Codeigniter 4可以在变量或任何其他选项中指定db_名称(Database.php),php,database,codeigniter,connection,codeigniter-4,Php,Database,Codeigniter,Connection,Codeigniter 4,我们想连接太多数据库中的一个作为默认值。 根据用户要求,所以我们希望在变量或全局变量中使用数据库名称 无法在Database.php文件中使用任何变量 大家帮我解决这个问题 我尝试在配置文件中分配动态变量等“奇怪”的事情已经有一段时间了,所以我不完全确定CodeIgniter是否支持它。然而,即使是这样,我还是建议使用为这类事情设计的功能: 我想,由于除数据库名称外,其他所有内容都是相同的,因此您也可以访问默认数据库的数据库配置属性,并使用$custom=array\u replace($co

我们想连接太多数据库中的一个作为默认值。 根据用户要求,所以我们希望在变量或全局变量中使用数据库名称

无法在Database.php文件中使用任何变量

大家帮我解决这个问题


我尝试在配置文件中分配动态变量等“奇怪”的事情已经有一段时间了,所以我不完全确定CodeIgniter是否支持它。然而,即使是这样,我还是建议使用为这类事情设计的功能:

我想,由于除数据库名称外,其他所有内容都是相同的,因此您也可以访问默认数据库的数据库配置属性,并使用
$custom=array\u replace($configDb,['database'=>$\u SESSION['db\u name'])
更改数据库名称。显然,请检查
db\u name
是否存在、是否为空以及所有这些问题。您甚至可以将整个逻辑放入一个类中,并使用
db\u name
作为构造函数,这样您就不必一直这样做

例如(未经测试):



我相信你已经考虑过了,但是CI4还没有完全准备好生产。老实说,我会使用像Laravel、Lumen或Symfony这样的东西,它们已经有了广泛且经过测试的代码库,以及许多兼容的第三方软件包。

DB name是session??What!!!!Yekes。重新考虑你的要求,或者最好向她解释一下e因为基于用户输入动态获取数据库名称对我来说很可怕。是的会话,但在codeigniter 4中,这种方式连接到db请不要发布代码的图像我们使用codeigniter 4,所以我认为版本更多限制使用其他变量或其他东西,所以您对codeigniter 4有任何想法抱歉,没有将CI4视为image名称。请下次标记CI4。据我所知,它实际上是相同的,只是语法不同。请参阅更新的答案。感谢反馈!记录声誉低于15的人的投票,但不要更改公开显示的帖子分数。“显示此错误”
$custom = [
            'DSN'      => '',
            'hostname' => 'localhost',
            'username' => '',
            'password' => '',
            'database' => '',
            'DBDriver' => 'MySQLi',
            'DBPrefix' => '',
            'pConnect' => false,
            'DBDebug'  => (ENVIRONMENT !== 'production'),
            'cacheOn'  => false,
            'cacheDir' => '',
            'charset'  => 'utf8',
            'DBCollat' => 'utf8_general_ci',
            'swapPre'  => '',
            'encrypt'  => false,
            'compress' => false,
            'strictOn' => false,
            'failover' => [],
            'port'     => 3306,
    ];
$db = \Config\Database::connect($custom);
namespace App\Config;

use InvalidArgumentException;

class DatabaseChooser extends \Config\Database
{

    protected $dbName;

    public function __construct(string $dbName = '')
    {
        $this->dbName = $dbName;
        $config = $this->buildArr();
        return parent::connect($config);
    }

    private function buildArr()
    {
        if (empty($this->dbName)) {
            throw InvalidArgumentException('dbName cannot be empty');
        }
        $default = $this->defaultGroup;
        if (property_exists($this, $default) && is_array($this->$default)) {
            return array_replace($this->$default, ['database' => $this->dbName]);
        } else {
            throw new Exception('Invalid configuration.');
        }
    }

}