gpt4 book ai didi

mysql - PHP PDO - 在执行查询之前测试连接?

转载 作者:行者123 更新时间:2023-11-30 01:25:35 24 4
gpt4 key购买 nike

   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只会在脚本自动执行完成后才破坏它的连接?检查它是打开还是关闭是否正确?

最佳答案

这实现了 lazy loading 的形式.

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

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

仅供引用,此检查效率稍低。一个简单的 $this->db->query('SELECT 1') 就足够了,根本不需要读取表格。

关于mysql - PHP PDO - 在执行查询之前测试连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com