2013-03-25 92 views
3

如果从函数内部调用,返回语句立即结束当前函数的执行,并返回其参数 函数调用的值。php/mysqli:我应该在free_result返回之前吗?

从PHP手册引用:http://php.net/manual/en/function.return.php

所以,如果我写这样的功能:

public function check_db_for_desired_value() 
{ 
    //...connect to db, prepare stmt, etc. 
    while (mysqli_stmt_fetch($stmt)) 
    { 
    if($column == 'desired_value') 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
    } 
    // these commands would never get executed 
    mysqli_stmt_free_result($stmt); 
    mysqli_stmt_close($stmt); 
    mysqli_close($link); 
} 

所以(如果有什么说PHP手册是正确的),我的成绩得到永远不会被释放,我的stmt永远不会关闭,我的db连接保持打开状态,因为我返回了一些东西并结束了函数的执行...

所以我应该不是返回一些设置的值变量,然后在关闭所有内容后返回这个值?

我问,因为我的代码是工作,我没有得到任何错误沉绵我写的功能,如在此之前...

+1

只是复制所有free_result并关闭到返回之前。所以,如果你在同一个脚本中使用这个函数两次,它不会抱怨 – Waygood 2013-03-25 14:02:34

+0

有谁知道为什么我从来没有收到任何错误,即使我写了这段不正确的代码?我希望得到类似''不能打开另一个数据库连接的消息,因为一个已经打开“或”内部SQL错误:2014,命令不同步;现在不能运行此命令“' – olli 2013-03-25 17:49:10

+1

您的重新连接和因此重新设置状态。如果你的连接超出了功能,那么你会遇到问题 – Waygood 2013-03-25 17:51:30

回答

1

你是正确的,什么是return后执行。

但是你可以用__destruct关闭连接和明确的结果:

function __destruct() { 
    mysqli_stmt_free_result($this->stmt); // making $stmt a variable inside class 
    mysqli_stmt_close($this->stmt); 
    mysqli_close($this->link); 
} 

析构函数方法将被立即调用,因为有在任何其它引用特定对象,或以任何顺序关机顺序。 - PHP.NET

否则,您应该在调用return之前移动空闲和关闭。

相关问题