2016-01-07 184 views
0

我正在学习MySQL和PHP,我想打消这种怀疑。也许是愚蠢的,但我想以良好的方式学习,我没有找到答案。所以,我有几个QUERIES,我的疑问是:我必须关闭$ result-> close();每一个或只是一个在最后与$ conn-> close();关闭查询和连接

例1:关闭每一个

$sql = "CREATE TABLE atable (
idatable INT(5) NOT NULL AUTO_INCREMENT, 
name VARCHAR(10) NOT NULL, 
lastname VARCHAR(10) NOT NULL, 
PRIMARY KEY(idatable))"; 

$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 


$result->close(); 


$sql = "DESCRIBE atable"; 
$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 

// Here more code... 
$result->close(); 


$sql = "SELECT * FROM atable"; 
$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 


// Here more code... 
$result->close(); 


$conn->close(); 

例2:关闭一个时间在END

$sql = "CREATE TABLE atable (
idatable INT(5) NOT NULL AUTO_INCREMENT, 
name VARCHAR(10) NOT NULL, 
lastname VARCHAR(10) NOT NULL, 
PRIMARY KEY(idatable))"; 

$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 


$sql = "DESCRIBE atable"; 
$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 


// Here more code... 


$sql = "SELECT * FROM atable"; 
$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 


// Here more code... 


$result->close(); 
$conn->close(); 

请记住,我的学习!谢谢!

+0

[这](http://stackoverflow.com/questions/2417834/mysqli-query-results-best-approach-do-you-close-free-both)可能会有帮助,你可以,如果在你的__destruct中使用类有'$ db-> close()'的东西。 – Script47

+0

当脚本结束时,PHP将自动关闭连接和结果。所以如果你认为你使用足够的内存来引发内存/资源问题,你真的只需手动完成 – RiggsFolly

+0

$ conn和$ result的数据类型是什么? – Shadow

回答

1

如同在下面看到的类似帖子中回答的那样,如果您在执行后没有关闭每个结果,它将被存储到内存缓冲区中。因此,如果结果使用了大量的内存(大型查询结果),那么将有效地使用result-> close()。

但是,在大多数情况下,它不是必需的,当变量达到其作用域的末尾时,结果将被释放。我会考虑将你的代码放入一个函数中,然后根本不需要解决这个问题。例如

public function query($sql){ 

$result = $conn->query($sql); 
if(!$result) { 
    die($conn->error); 
} 
    $result->close(); 

} 

或类似的东西。希望这有助于。

Why do we close result in Mysqli