Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何阻止此mysqli扩展类停止在失败的';real#u connect';?_Php_Mysqli - Fatal编程技术网

Php 如何阻止此mysqli扩展类停止在失败的';real#u connect';?

Php 如何阻止此mysqli扩展类停止在失败的';real#u connect';?,php,mysqli,Php,Mysqli,因此,下面的代码还处于幼稚阶段,还有很长的路要走——但我正在一个数据库平台上工作,该平台可以感知多个数据库(从数据库等),这意味着尝试打开一个到一个的连接,一旦失败,继续到另一个。“DatabaseConnection”类中的相关方法如下所示: class DatabaseConnection extends mysqli { public function __construct($ConnectAutomatically=false,$Name="database",$Host="1

因此,下面的代码还处于幼稚阶段,还有很长的路要走——但我正在一个数据库平台上工作,该平台可以感知多个数据库(从数据库等),这意味着尝试打开一个到一个的连接,一旦失败,继续到另一个。“DatabaseConnection”类中的相关方法如下所示:

class DatabaseConnection extends mysqli
{
    public function __construct($ConnectAutomatically=false,$Name="database",$Host="127.0.0.1",$Username="root",$Password="",$Catalog="",$Port=3306)
    {
        $this->CurrentHost = $_SERVER['SERVER_NAME'];           

        $this->Name = $Name;
        $this->Host = $Host;
        $this->Username = $Username;
        $this->Password = $Password;
        $this->Port = $Port;
        $this->Catalog = $Catalog;

        if( $ConnectAutomatically )
            parent::__construct($this->Host, $this->Username, $this->Password, $this->Catalog, $this->Port);
        else
            parent::init();

        return;
    }

    public function Open()
    {
        try
        {
            if(!parent::real_connect($this->Host,$this->Username,$this->Password,$this->Catalog,$this->Port))
            {
                return false;
            }
            else
                return true;
        }
        catch( Exception $e )
        {
            return false;
        }
    }
}
其思想是,数据库可以在任何时候查询,而无需初始化-因此,查询方法会检查连接性,并在缺乏连接性时运行“Open”方法

我故意在密码中添加了一个坏字符,以迫使它无法连接,以查看它是否会连接到列表中的第二台服务器-但是在“parent::real_connect”行上,我得到了一个明显的响应,即由于密码无效,我无法连接

我想知道在这个“开放”方法中是否有一种不同的方法可以在实际连接操作失败时不停止执行。我在这个问题上做了几次尝试,结果都失败了,所以我不得不问。从我的角度来看,如果连接失败,mysqli将不允许程序继续执行

我已经有了自定义的错误捕获功能,它似乎可以捕获错误-但是如果不解释错误并从错误处理程序中重新执行DatabaseHandler connect方法,那么目前我看不到其他很多方法


如果需要的话,我很乐意分享更多。

Open
应该尝试列表中的下一个数据库,还是由调用
Open
的代码完成的?如果
Open
这样做,它从哪里获得列表?父类“DatabaseHandler”存储一个“DatabaseConnection”列表,它是按需打开的。我应该继续说,我相当肯定我在这方面的逻辑是有效的;只要我能从这个打开的方法返回false——这永远不会发生。它只是在“real_connect”上出现故障并死亡。我看不出它如何在错误处理程序就位的情况下出现故障。将
echo
语句放在每个
return
语句之前,查看实际执行的块。我在这里看到的唯一其他选项是将错误处理重新路由到我的“DatabaseHandler.Connect”方法,直到我建立了连接,然后将其设置回我的标准错误处理程序。。。但这似乎很麻烦。