PDO立即连接到数据库还是在准备/查询之后连接到数据库

时间:2019-04-07 23:26:52

标签: php database pdo

我正在尝试编写一些具有多个类的代码,这些类以后将具有大量的数据库连接/查询。

我的问题是,执行以下行后PDO是否会立即连接到数据库,并且它将一直保持连接状态,直到关闭为止?

$pdo = new PDO($dsn, $user, $pass, $options);

或者等到我们执行以下操作为止,例如:

$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$email]);
$user = $stmt->fetch();

// Closing connection
$stmt = null;

如果我们执行new PDO()时没有立即连接它,那么我可以轻松地将$pdo变量设为全局变量并在每个类中使用它,否则我必须在每个类中分别与{{ 1}}方法,然后在__construct()方法上关闭连接。 (我仍然不确定这是否是获得更好性能的最佳方法)

P.S。我们是否还需要设置__destruct()来关闭连接?还是$pdo = null就足够了?

1 个答案:

答案 0 :(得分:1)

实例化new PDO()时,它将尝试保持与数据库的连接。

  

通过创建PDO基类的实例来建立连接。

Source

除非您的代码库相对较小,否则我建议avoid using global variables。您将在不应共享的数据库实例上进行共享!

也许我们可以产生一个单例类来获取您的数据库连接。这样一来,一旦您的数据库工作完成,我们就可以获取连接的单个实例并完成关闭连接之前所需的所有工作。

最好尽早关闭数据库连接。但是,脚本完成执行后,PHP会为您完成。

  

如果您未明确进行此操作,则PHP将在脚本结束时自动关闭连接。

Source

我希望这会有所帮助!