Php Laravel 5.1-检查数据库连接

Php Laravel 5.1-检查数据库连接,php,mysql,laravel,Php,Mysql,Laravel,我正在尝试检查数据库是否在Laravel中连接 我看了一下文档,什么也找不到。我发现最接近的事情是,但这并不能解决我的问题 我有三个MySQL实例,它们安装在不同的机器上。下面是我试图实现的一个简化版本 如果数据库1已连接,请将数据保存到其中 如果数据库1未连接,请检查数据库2是否已连接 如果数据库2已连接,请将数据保存到该数据库 如果数据库2未连接,请检查数据库3是否已连接 如果数据库3已连接,请将数据保存到该数据库 需要明确的是,是否有方法检查Laravel 5.1中的数据库是否已连接?您可

我正在尝试检查数据库是否在Laravel中连接

我看了一下文档,什么也找不到。我发现最接近的事情是,但这并不能解决我的问题

我有三个MySQL实例,它们安装在不同的机器上。下面是我试图实现的一个简化版本

  • 如果数据库1已连接,请将数据保存到其中
  • 如果数据库1未连接,请检查数据库2是否已连接
  • 如果数据库2已连接,请将数据保存到该数据库
  • 如果数据库2未连接,请检查数据库3是否已连接
  • 如果数据库3已连接,请将数据保存到该数据库

  • 需要明确的是,是否有方法检查Laravel 5.1中的数据库是否已连接?

    您可以使用此查询检查Laravel中的数据库连接:

    use Illuminate\Support\Facades\DB;
    // ...
    $pdo = DB::connection()->getPdo();
    
    if($pdo)
       {
         echo "Connected successfully to database ".DB::connection()->getDatabaseName();
       } else {
         echo "You are not connected to database";
       }
    
    有关更多信息,您可以查看此页面。

    另一种方法: 当Laravel尝试连接到数据库时,如果连接失败或发现任何错误,它将返回
    PDOException
    错误。我们可以捕获此错误并重定向操作

    app/filtes.php
    文件中添加以下代码

    App::error(function(PDOException $exception)
    {
        Log::error("Error connecting to database: ".$exception->getMessage());
    
        return "Error connecting to database";
    });
    

    希望这会有所帮助。

    尝试获取底层PDO实例。如果失败,那么Laravel无法连接到数据库

    // Test database connection
    try {
        DB::connection()->getPdo();
    } catch (\Exception $e) {
        die("Could not connect to the database.  Please check your configuration. error:" . $e );
    }
    

    您可以在控制器方法或路由的内联函数中使用:

       use Illuminate\Support\Facades\DB;
       //....
       try {
            DB::connection()->getPdo();
            if(DB::connection()->getDatabaseName()){
                echo "Yes! Successfully connected to the DB: " . DB::connection()->getDatabaseName();
            }else{
                die("Could not find the database. Please check your configuration.");
            }
        } catch (\Exception $e) {
            die("Could not open connection to database server.  Please check your configuration.");
        }
    
    您可以与Artisan一起使用解决方案。在命令行中运行以下命令

    php artisan tinker
    DB::connection()->getPdo();
    
    如果连接正常,您应该看到

    连接状态:“连接正常;正在等待发送。”

    在回答快结束时

    您还可以运行以下命令:

    php artisan migrate:status
    


    它建立一个db连接,以从迁移表中获取迁移。如果连接失败,它将抛出异常。

    最明显的方法是在try-catch中从数据库中选择一些内容。每当抛出异常时,服务器/连接都不可用(假设没有任何其他错误-您可能希望在此处使用异常代码,以确保这不是查询问题(如缺少列或其他内容)。@milz这是我的第一个想法,但是我希望有一个预先存在的方法来解决这个问题。你是说app/filters.php吗?缺少一个“r”。问题是laravel 5.1,5.1中的laravel结构没有使用app/filters.php目录。这是给拉雷维尔4号的。从红熊的评论来看:@Artisbay的方法听起来很有效。如果筛选器不再可用,也许您可以尝试在中间件中写入。此检查似乎是从配置读取的,而不是从活动连接读取的。如果连接参数不正确,这仍然会报告已成功连接。此代码只返回配置文件中的值!这个答案有误导性。任何来到这里的人都必须看看下面@alexw的答案。如果后来的读者被关于这是一个错误答案的评论弄糊涂了,而这似乎与@alexw的答案基本相同,原因是:这个答案,用于阅读
    if(DB::connection()->getDatabaseName())
    ,但是在评论反馈之后,答案被更新为使用
    DB::connection()->getPdo()
    而不是以后的读者,他们被返回配置和不进行任何检查的前两条注释弄糊涂了,他们是错误的。确保测试时不要更改本地主机IP地址中的最后一位数字(如.127.0.0.1到127.0.0.23),因为第二个地址仍将解析到本地主机,从而使此检查无效。@YasserMoussa,您可以将它放在需要检查与数据库的工作连接的任何位置。@alexw ok,例如,当laravel第一次启动时,我需要使用此代码,所以我在AppServiceProvider on boot()方法和catch die()中使用了它,但返回视图('errors.database')不起作用,它只显示了laravel errors页面。。我遗漏了什么吗?不确定-也许可以尝试在Freenode IRC中使用#laravel来帮助解决您的具体情况。这对我不起作用-getPdo()超时时间比nginx超时时间长,我不想搞乱服务器配置,我只想检查我是否可以访问我的数据库。伙计们,您可以创建一个路由并添加这些代码进行测试:您可以将其作为内联函数添加到路由(web.php)或任何控制器方法中。据我所测试的,似乎不需要
    ->getDatabaseName()
    部分,因为
    ->getPdo()
    将已经抛出错误(如果我错了,我很高兴知道这一点)。您可以提供原始解决方案的链接吗?顺便说一句,
    php artisan tinker
    DB:connection()
    可以针对
    vendor/laravel/framework/src/light/Database/connection.php
    类中的任何API公共端点,尤其是
    getConfig()
    ,这对于获取连接到数据库的详细信息非常方便,允许您从您选择的客户端手动尝试连接。这实际上比写一个函数要快