mysqli_free_result有必要吗?

时间:2012-12-30 03:51:47

标签: php mysqli

我正在查看我的代码,并且读到当不再需要结果对象时,建议使用mysqli_free_result。但是在看到每个查询在整个脚本中反复输出$result变量后,我想知道mysqli_free_result是否真的有必要。似乎每次运行查询时,$result变量已经被清除并设置为新结果。只是好奇是否有人对此有任何意见。

3 个答案:

答案 0 :(得分:8)

实际上这是必要的,因为当发出许多请求时,它可能会对服务器造成沉重的负担。所以最好你应该使用它。

当您知道此查询后跟其他查询时,您可以不必使用它。

答案 1 :(得分:8)

这绝不是绝对必要的,但最好是密切关注您正在使用的资源,并知道何时不再需要它们。

放入额外的代码行只需要很少的工作量,所以每次完成结果集时我都会这样做。它还有一个额外的好处,就是当你完成资源时,有人会清楚地阅读你的代码。

答案 2 :(得分:0)

它使代码混乱。这不是基于功能的理由放弃mysqli_free_result,但在我看来这是一个正当理由。请考虑下面的代码段。

你不会节省大量内存来释放单个记录查询。 除非你知道它们是必要的 - 除非你的某些脚本使用的内存超过你可以分配的内存(应该很少),否则请跳过它们。

释放这些资源的另一个原因是操作系统级别限制打开文件句柄的数量。但是,我认为所有查询都通过这一个连接或一个文件句柄或套接字。

 // Share PDF
 if ($_REQUEST['do'] == 'sharePDF') {
-   $sql = "SELECT * FROM c_document WHERE doc_id = $doc_id";
-   $res = mysql_query($sql);
-   $doc_row = mysql_fetch_assoc($res);
-   mysql_free_result($res);
-   $d_name = $doc_row['d_name'];
-   $templ_id = $doc_row['templ_id'];
-   $sql = "SELECT * FROM c_template WHERE templ_id = $templ_id";
-   $res = mysql_query($sql);
-   $templ_row = mysql_fetch_assoc($res);
-   mysql_free_result($res);
+
+   $doc_row = qAssocOne("SELECT * FROM c_document WHERE doc_id = $doc_id");
+   $templ_row = qAssocOne("SELECT * FROM c_template WHERE templ_id = {$doc_row['templ_id']}") ;
+
    $params = array(
        'share_pdf_core_id='.$templ_row['share_pdf_core_id'],
        'share_pdf_create_id='.$templ_row['share_pdf_create_id'],
@@ -193,7 +187,7 @@ if ($_REQUEST['do'] == 'sharePDF') {
        'doc_id='.intval($_REQUEST['doc_id']),
        'pdf1='.urlencode($_REQUEST['pdf']),
        'pdf2=',
-       'name='.urlencode($d_name),
+       'name='.urlencode($doc_row['d_name']),
        'select_output='.$templ_row['select_output']
     );
    $params = join("&",$params);

在我看来,减去的行是绝对垃圾;十行与两行。请...

回应你的常识的评论:

没有人应该关心这个功能是做什么的。它说明了一点。 此外,该名称为您提供了提示。 Q用于查询,Assoc用于获取(水合)哈希而不是数字数组。 One表示一条记录,而不是一组记录。如果你真的无法猜测它的作用,请在线搜索。代码可用。第一次点击谷歌。

这不是无关紧要的。很多PHP代码都是这样的。我的观点在答案中说明。 这是不必要的,因为用一行清除结果集不会为您节省太多内存。 它是不必要的,因为它使代码混乱并模糊了意图或业务逻辑。

有-好的天