PHP:如何确定数据库连接是否已打开

MD *_*med 8 php mysql

我有以下类方法 -

class Someclass
{
    /* Other properties and methods */

    public function close_connection($connection=NULL)
    {
        return mysql_close($connection)
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在mysql_close上面的代码中调用函数之前,我想检查是否$connection指向打开的数据库连接.也就是说,我想确保我关闭的连接已打开且尚未关闭.

我怎样才能做到这一点?

use*_*297 21

您可以尝试检查您的$connection变量是否是一个有效的资源.

<?php
if(is_resource($connection))
{
    mysql_close($connection);
}
?>
Run Code Online (Sandbox Code Playgroud)

编辑:好的,这个更新的代码现在包括戈登的建议.

<?php
if(is_resource($connection) && get_resource_type($connection) === 'mysql link')
{
    return mysql_close($connection);
}
else
{
    return false;
}
?>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,即使`$ connection`不是[mysql link resource](http://de2.php.net/manual/en/language.types.resource.php),这也会返回`TRUE`.您可以使用[get_resource_type()](http://de2.php.net/manual/en/function.get-resource-type.php)来确保. (5认同)

Tra*_*vis 11

你可以试试mysql_thread_id($ connection).如果没有可用的连接,那将返回false.

  • 我认为mysql_ping尝试重新打开连接. (5认同)

kas*_*rjj 4

如果您有其他可能关闭连接的代码,请让他们将连接设置为空,以便您可以进行测试。

如果您不确定连接是否已从另一端关闭,由于超时或网络错误,测试它的唯一方法是使用 mysql_ping 等实际发送数据。然而,如果您只是想避免关闭可能已经关闭的连接,这将是对资源的严重浪费。

注意:正如evord所提到的,如果连接不再打开,使用mysql_ping将尝试重新打开连接。