【问题标题】:Checking if database connection established / exists Ci4检查数据库连接是否建立/存在 Ci4
【发布时间】:2021-07-14 07:03:47
【问题描述】:

我正在尝试检查 id 数据库连接是否存在,然后重定向到用户可以通过表单输入创建数据库的页面。

这是我试图做但没有成功的事情。

public function index()
{
    // $database = \Config\Database::connect();
    $database = \CodeIgniter\Database\Config::getConnections();

    if ($database) 
    {
        //db connection initialized
        return view('dashboard');
    }
    else
    {
        //db connection  not initialized
        return redirect('db_setup');
    }

}

【问题讨论】:

  • 您是否遇到了一些错误?
  • 立即查看我的答案
  • 请采纳正确答案

标签: codeigniter-4


【解决方案1】:

使用来自 Virender Kumar 的代码,但根据您的 dbname 验证请求对其进行扩展,使用如下代码:

$database = \Config\Database::connect();
if ($database) 
{
    // check if db exists:
    if($database->query("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='yourDbName'")) {
        //db connection initialized
        return view('dashboard');
    } else {
        return false; // db not exist
    }
} else {
    //db connection  not initialized
    return redirect()->to('db_setup');
}

说明:我添加了一个 CodeIgniter 4 原始查询 $db->query(),它从数据库中选择一般信息架构。如果数据库不存在,你会得到一个错误。

【讨论】:

  • 谢谢乔纳森。我将 $database 更改为 $db,但是如果我运行 $db->query(" THE SQL ABOVE") 即使通过了正确的 dbname,我也会收到错误消息。它在第 398 行从 SYSTEMPATH\Database\BaseConnection.php 返回错误,并显示消息“无法连接到数据库。”。我怎样才能先解决这个问题?
  • 尝试使用$database->() 而不是$db->query()
  • 问题是没有改变 $database->query(''),然后我得到的是错误而不是在找不到 db 时被重定向。它迫使我更改数据库类或 .env 上的 db 配置选项,这不是我想要的。我尝试了很多,但是由于 mysqli/pdo 在 db 未初始化/或不正确的 db 时抛出异常错误。
  • 运行 $database->query("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='ecommerceDb'");正在检查 $this->connId()。你能检查一下如果你把不存在的 dbname 放在 .env 中会发生什么,即 database.default.database = wrongDbName
  • 如果我在 phpMyadmin 上运行,此语句可以正常工作。 “从 INFORMATION_SCHEMA.SCHEMATA 中选择 SCHEMA_NAME,其中 SCHEMA_NAME='ecommerceDb'”。但问题是当我尝试使用 $database->query("THAT QUERY");由于 $database 检查 .env 或 Dababase 类配置是否错误,它会抛出异常错误。
【解决方案2】:

您在重定向函数中有语法错误,我不确定您在那里实现的 getconnections 函数,但 connect () 将起作用。查看更新的代码

$database = \Config\Database::connect();
    if ($database) 
    {
        //db connection initialized
        return view('dashboard');
    }
    else
    {
        //db connection  not initialized
        return redirect()->to('db_setup');
    }

【讨论】:

  • 谢谢。但是现在的问题是当数据库名称错误时它仍然返回true。我该如何解决?
  • 感谢 Virender Kumar。此条件对 i​​f 和 else 都返回 true。但是我的问题是当 db 对 bd class/ .env 文件不正确时能够绕过抛出错误。但是我没有找到一个检查它并返回true或false而不抛出异常错误的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多