php - 能够使用 Laravel 在运行时更改数据库连接

标签 php sql database laravel

所以我正在制作一个 Web 应用程序,它应该能够按计划将任何 SQL 语句上传到数据库中列出的任何服务器。它应该连接到数据库,执行语句并根据收到的信息生成报告。然后它可以断开连接。

目前,我有一份工作,它从数据库中获取所需的所有信息,例如。主机、端口、DBName 等。我只需要形成一个连接,然后执行语句。

我正在使用 Laravel 框架。

编辑:我无法修改任何数据库配置,因为数据库信息存储在表中,而不是配置文件中。

谢谢

最佳答案

你可以在运行时这样设置它:

$connKey = 'CustomConnection';

$dbInfo = DatabaseInfo::find($databaseId);

Config::set('database.connections.' . $connKey, array(
    'driver'    => 'mysql',
    'host'      => $dbInfo->hostName,
    'database'  => $dbInfo->database,
    'username'  => $dbInfo->username,
    'password'  => $dbInfo->password,
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => '',
));

// Now you can set the new connection to the models

$myModel = new MyModel;
$myModel->setConnection($connKey);

// Or you can use it this way too:
$users = DB::connection($connKey)->select(...);

// Or, also:
$pdo = DB::connection($connKey)->getPdo();

关于php - 能够使用 Laravel 在运行时更改数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46427007/

相关文章:

mysql - 按选项过滤产品

php - 向所有用户公开 SQL SELECT 查询功能 : setting timeouts and limiting keywords. 这可以安全地完成吗?

Android Realm 错误,尝试使用异步。说它是从没有循环器的线程中打开的

php - SELECT 字段列表中的 CONCAT() 函数

php - 为什么 CakePHP 在我的表单中呈现下拉列表而不是文本框?

php - MYSQL 和 PHP 字段/列名称作为变量

php - SilverStripe 中的相关博客文章

php - 是否可以使用一个 mysql 查询来实现这一目标?

sql - 如何在 where 子句中使用预先使用的子查询?

sql - sql查询中的问题