Codeigniter 4可以在变量或任何其他选项中指定db_名称(Database.php)
我们想连接太多数据库中的一个作为默认值。 根据用户要求,所以我们希望在变量或全局变量中使用数据库名称 无法在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
我尝试在配置文件中分配动态变量等“奇怪”的事情已经有一段时间了,所以我不完全确定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.');
}
}
}