Php 关闭函数内部的PDO连接
中给出了如何关闭连接的以下示例:Php 关闭函数内部的PDO连接,php,mysql,pdo,Php,Mysql,Pdo,中给出了如何关闭连接的以下示例: $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); // use the connection here // and now we're done; close it $dbh = null; 但是,如果我在一个函数中使用它,$dbh只有局部作用域,我是否必须将它设置为null,或者在函数返回时连接会关闭 在下面的示例中,连接是否关闭 public function doDB
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// use the connection here
// and now we're done; close it
$dbh = null;
但是,如果我在一个函数中使用它,$dbh
只有局部作用域,我是否必须将它设置为null,或者在函数返回时连接会关闭
在下面的示例中,连接是否关闭
public function doDBWork(){
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// use the connection here
return true;
}
根据文件:
通过将NULL
赋值给保存对象的变量,可以[关闭连接]。如果不显式地执行此操作,PHP将在脚本结束时自动关闭连接
因此,连接不会在函数结束时关闭,因为您没有分配null
。虽然它是不可访问的,因为它的作用域是函数的局部,但从技术上讲,它在脚本结束之前不会关闭
注意:一般来说,我不建议在函数调用中建立和关闭数据库连接。根据文档:
通过将NULL
赋值给保存对象的变量,可以[关闭连接]。如果不显式地执行此操作,PHP将在脚本结束时自动关闭连接
因此,连接不会在函数结束时关闭,因为您没有分配null
。虽然它是不可访问的,因为它的作用域是函数的局部,但从技术上讲,它在脚本结束之前不会关闭
注意:一般来说,我不建议在函数调用中建立和关闭数据库连接。您可以将DB句柄作为参数传递给全局函数(或静态方法)。但这真的没有必要。当代码执行结束时,DB句柄将自动关闭。不需要显式关闭它
function close_connection(PDO $dbh) {
$dbh = null;
}
可以将DB句柄作为参数传递给全局函数(或静态方法)。但这真的没有必要。当代码执行结束时,DB句柄将自动关闭。不需要显式关闭它
function close_connection(PDO $dbh) {
$dbh = null;
}
PHP PDO为您管理连接。您可以确保将null设置为PDO连接对象时连接将关闭。但是没有必要
在您的情况下,您没有使用连接进行查询,当方法结束时,连接将关闭。PHP PDO为您管理连接。您可以确保将null设置为PDO连接对象时连接将关闭。但是没有必要
在您的情况下,您没有使用连接进行查询,当方法结束时,连接将关闭。严格地说,将
$dbh
设置为null不会关闭连接。这将使PDO实例符合垃圾收集的条件(只要没有对该对象的任何其他引用)。大概PDO的析构函数会清理连接
为了回答您的问题,您的示例将关闭连接(或至少以与第一个示例相同的方式操作),因为再次
$dbh
将符合垃圾收集的条件。严格来说,将$dbh
设置为null不会关闭连接。这将使PDO实例符合垃圾收集的条件(只要没有对该对象的任何其他引用)。大概PDO的析构函数会清理连接
为了回答您的问题,您的示例将关闭连接(或者至少以与第一个示例相同的方式操作),因为再次
$dbh
将符合垃圾收集的条件。更好的方法可能是依赖项注入,这样您就不必打开多个连接
class MyClass {
protected $PDO;
public function __construct(PDO $PDO) {
$this->PDO = $PDO;
}
public function DoDbWork() {
$this->PDO->Query(); //uses same PDO instance that was supplied outside class
}
}
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
//call multiple functions, do stuff procedurely, etc.
$t = new MyClass($dbh);
$t->DoDbWork();
$dbh = null;
更好的方法可能是依赖项注入,这样您就不必打开多个连接
class MyClass {
protected $PDO;
public function __construct(PDO $PDO) {
$this->PDO = $PDO;
}
public function DoDbWork() {
$this->PDO->Query(); //uses same PDO instance that was supplied outside class
}
}
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
//call multiple functions, do stuff procedurely, etc.
$t = new MyClass($dbh);
$t->DoDbWork();
$dbh = null;
我正在编写一个数据库连接受限的脚本(由于服务器负载限制)。所以连接应该只打开一小段时间(在函数中)。因此,连接只能打开一小段时间(在函数中)。