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只会在脚本自动完成执行后破坏它的连接? 检查它是打开还是关闭是否正确?
答案 0 :(得分:0)
这实现了lazy loading。
的形式第一次通过此类/函数执行查询时,可能尚未建立数据库连接。这是此检查的目的,因此消费者(您)不必考虑它。
然后将连接存储在$this->db
类成员中,以便在脚本过程中再次调用此方法时将来重用(是的,此连接将保持打开状态直到脚本结束 - 除非它当然,事先明确表示。
有关信息,此检查效率稍低。一个简单的$this->db->query('SELECT 1')
就足够了,根本不需要读表。