我几乎整天都在寻找这个......而且似乎无法找到任何地方返回的值。有人能告诉我:
PDO::getAttribute(PDO::ATTR_CONNECTION_STATUS);
返回什么值?答案 0 :(得分:4)
最后!事实证明,mysqli::ping()
函数可以在PDO中实现,如下所示:
class PDOExtended extends PDO {
public function __construct($dsn, $user, $pass, $options = array())
{
$this->link = parent::__construct($dsn, $user, $pass, $options);
$this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
}
// some methods
public function isConnected()
{
try {
return (bool) $this->link->query('SELECT 1+1');
} catch (PDOException $e) {
return false;
}
}
//some other methods
}
<强>原因:强>
PDO::query();
返回包含结果的数组或false,在当前情况下,它不会返回任何内容,因为连接已死,PDO应该向我们抛出异常。这就是我们所期待的。 catch块将返回false,并且不会停止执行我们的脚本。使用的查询
SELECT 1 + 1;
将始终返回2,并且由于它是在DB端计算的事实而依赖它是好的。没有联系,没有结果!它不是一种矫枉过正,因为它是非常简单的查询,并且大多数数据库(在普通共享主机上)都在localhost上,它不会超过0.0000s
,这不是性能问题。尚未对交易进行测试,但仍应该做到这一点。