如何在PHP和Laravel中测试MySQL连接?

mpe*_*pet 1 php mysql laravel laravel-4

我正在制作PHP应用程序安装程序(类似于Wordpress安装脚本),我需要在安装过程中使用用户提供的主机名,用户名,密码和数据库来检查mysql连接.

我正在使用此代码作为Laravel控制器方法来测试连接:

public function TestDatabaseConnection(){
    try {
        $database_host = Config::get('config.database_host');
        $database_name = Config::get('config.database_name');
        $database_user = Config::get('config.database_user');
        $database_password = Config::get('config.database_password');

        $connection = mysqli_connect($database_host,$database_user,$database_password,$database_name);

        if (mysqli_connect_errno()){
                return false;
            } else {
                return true;
            }

    } catch (Exception $e) {

        return false;

    }
}
Run Code Online (Sandbox Code Playgroud)

此代码似乎没有正确测试连接.函数返回值(true/false)不取决于用户是否提供db数据,或者db数据是否正确/不正确.

Fils /app/config/config.php包含以下数组:

<?php return array('database_host' => 'localhost', 'database_name' => 'dbasename',    'database_user' => 'dbuser', 'database_password' => 'pass');
Run Code Online (Sandbox Code Playgroud)

它在安装过程中通过表单进行更新.

有没有办法修改此代码或者您可能有其他一些代码建议?

Jak*_*uld 5

你的问题是:

如何在PHP和Laravel中测试MySQL连接?

但是,您正在建立一个标准的PHP MySQLi连接,如下所示:

$connection = mysqli_connect($database_host,$database_user,$database_password,$database_name);
Run Code Online (Sandbox Code Playgroud)

为什么要这么做?使用框架的整个目的是在框架内工作.包含这两个基本系统概念的东西:

  • 读取配置文件.
  • 建立数据库连接.

做这些事情是几乎每个有能力和广泛采用的编程框架应该能够在其自己的结构内处理并使用它自己的方法.

所以说,查看Laravel关于"基本数据库使用"的文档显示如下.它位于您的数据库配置文件中app/config/database.php.:

'mysql' => array(
    'read' => array(
        'host' => '192.168.1.1',
    ),
    'write' => array(
        'host' => '196.168.1.2'
    ),
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),
Run Code Online (Sandbox Code Playgroud)

该示例具有两个不同的数据库连接:一个用于read,另一个用于write,但这不是简单项目的大多数数据库连接的工作方式.所以你也可以使用你的设置来设置它:

'mysql' => array(
    'host'      => Config::get('config.database_host'),
    'driver'    => 'mysql',
    'database'  => Config::get('config.database_name'),
    'username'  => Config::get('config.database_user'),
    'password'  => Config::get('config.database_password'),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),
Run Code Online (Sandbox Code Playgroud)

然后要测试该连接,您只需执行此操作:

if(DB::connection()->getDatabaseName())
{
   echo "Yes! successfully connected to the DB: " . DB::connection()->getDatabaseName();
}
Run Code Online (Sandbox Code Playgroud)

但那说你也说:

I'm making a PHP application installer…
Run Code Online (Sandbox Code Playgroud)

为什么在PHP构建系统Phing存在时重新发明轮子?

  • 检查getDatabaseName实际上并不对数据库执行任何操作.它以`.env`返回配置变量的值,因此不起作用. (3认同)