0
   public function smart_query($query, $options = null, $bindoptions = null)
    {  

      // Code to Reconnect incase of timeout
      try {
           $this->db->query('SELECT * FROM templates');
          }
      catch (PDOException $e) 
          {  
            echo $e;

            $pdooptions = array(
            PDO::ATTR_PERSISTENT    => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
            );

            $this->db = new PDO("mysql:host=localhost;dbname=$this->database", "$this->username", "$this->password", $pdooptions);
          }

      $this->statement = $this->db->prepare($query);

      if($bindoptions != null)
        {
          $this->bind($bindoptions);
        }

      $this->execute();

      if($options != null)
       {
         // Return Single Row
         if($options['rows'] == 1)
          {
           return $this->statement->fetch(PDO::FETCH_ASSOC);
          }

         // Return Multiple Rows
         elseif($options['rows'] != 1)
          {
           return $this->statement->fetchAll(PDO::FETCH_ASSOC);      
          } 
       }
    }

我今天看到了这段代码,真的很困惑。在进行实际查询之前,他似乎正在尝试处理一个简单的查询。

他为什么要检查连接是否仍然打开?

我认为PDO只会在脚本自动执行完成后破坏它的连接?检查它是打开还是关闭是否正确?

4

1 回答 1

0

这实现了一种延迟加载的形式。

第一次通过此类/函数执行查询时,可能尚未建立数据库连接。这是此检查的目的,以便消费者(您)不必介意。

然后将连接存储在$this->db类成员中,以供将来在脚本过程中再次调用此方法时重用(是的,此连接将保持打开状态,直到脚本结束 - 当然,除非它事先明确关闭) .

有关信息,此检查效率略低。一个简单的$this->db->query('SELECT 1')就足够了,根本不需要阅读表格。

于 2013-08-03T16:02:57.587 回答