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 ,这不是性能问题。 还没有用交易进行测试,但仍然应该这样做。

    链接地址: http://www.djcxy.com/p/12485.html

    上一篇: What are the possible results of PDO::getAttribute(PDO::ATTR

    下一篇: Pyramid: sessions and static assets