我几乎整天都在研究这个..似乎无法在任何地方找到返回的值。有人可以告诉我:
- 返回什么值
PDO::getAttribute(PDO::ATTR_CONNECTION_STATUS);
? - 是否可以依靠其结果来确定连接是否仍然存在?(最终,我可以用什么来检查连接是否仍然存在?)
我几乎整天都在研究这个..似乎无法在任何地方找到返回的值。有人可以告诉我:
PDO::getAttribute(PDO::ATTR_CONNECTION_STATUS);
?最后!事实证明,该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 并且不会停止我们的脚本的执行。使用的查询
选择 1+1;
将始终返回 2 并且由于它是在 DB 端计算的,因此值得信赖。没有联系,没有结果!这不是矫枉过正,因为它是非常简单的查询,并且大多数数据库(在普通共享主机上)都在本地主机上,它不会占用更多的时间0.0000s
,这并不是一个性能问题。尚未使用事务对其进行测试,但仍然可以解决问题。