dongxun7301 2019-04-29 13:22
浏览 121

使用eloquent的胶囊管理器无法捕获PDO异常

I've got a class that extends the capsule manager of eloquent :

class Database extends \Illuminate\Database\Capsule\Manager

Inside of it, I'm adding a connection in the constructor :

public function __construct()
{ 
    parent::__construct();

    try {
        $this->addConnection([
            'driver' => 'mysql',
            'host' => $server,
            'database' => $database,
            'username' => $username,
            'password' => $password,
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
        ]);

        $this->setAsGlobal();
        $this->bootEloquent();

    } catch (\Exception $ex) {
        exit("Can't connect to database");
    }
}

The problem here is that the catch is never called, if any of the database connection information is false, I get a Fatal error: Uncaught PDOException and not the exit I'm looking to get.

I suppose the problem is due to me having my own class that extends of the capsule manager, but how do I catch the connection errors in my own class using eloquent?

EDIT : Traceback -

Fatal error: Uncaught PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/vendor/illuminate/database/Connectors/Connector.php:70 Stack trace: #0 /var/www/vendor/illuminate/database/Connectors/Connector.php(70): PDO->__construct('mysql:host=mari...', 'root', 'root', Array) #1 /var/www/vendor/illuminate/database/Connectors/Connector.php(46): Illuminate\Database\Connectors\Connector->createPdoConnection('mysql:host=mari...', 'root', 'root', Array) #2 /var/www/vendor/illuminate/database/Connectors/MySqlConnector.php(24): Illuminate\Database\Connectors\Connector->createConnection('mysql:host=mari...', Array, Array) #3 /var/www/vendor/illuminate/database/Connectors/ConnectionFactory.php(182): Illuminate\Database\Connectors\MySqlConnector->connect(Array) #4 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors{closure}() #5 /var/www/vendor/illuminate/database/Connection.php(918): call_user_func(Object(Closure)) #6 /va in /var/www/vendor/illuminate/database/Connection.php on line 664

Having the class looking like this, and extending the select, update, insert functions :

class Database extends \Illuminate\Database\Capsule\Manager
{

    public function __construct()
    {
    }

    public static function select(string $query, array $params = [])
    {

    }

    public static function insert(string $query, array $params = [])
    {
    }

    public static function update(string $query, array $params = [])
    {
        return parent::update($query, $params);
    }

}

And then writing for example this :

new Database;
Database::update('XXX', []);
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥20 iqoo11 如何下载安装工程模式
    • ¥15 本题的答案是不是有问题
    • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
    • ¥15 C++使用Gunplot
    • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
    • ¥15 matlab数字图像处理频率域滤波
    • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
    • ¥15 ELGamal和paillier计算效率谁快?
    • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
    • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?