PDO :: getAttribute(PDO :: ATTR。)可能的结果是什么?
我几乎整天都在看这个......并且似乎无法找到任何地方返回的值。 有人可以告诉我:
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,并且不会停止脚本的执行。 使用的查询
SELECT 1 + 1;
将总是返回2,由于它是在DB侧进行计算的,因此依赖它是很好的。 没有连接,没有结果! 这不是一个矫枉过正的事情,因为它非常简单,查询和大部分数据库(在普通的共享主机上)都在本地主机上,它不会超过0.0000s
,这不是性能问题。 还没有用交易进行测试,但仍然应该这样做。
上一篇: What are the possible results of PDO::getAttribute(PDO::ATTR