mysqli_free_results的问题

时间:2013-07-27 20:02:27

标签: php mysql mysqli

我在使用mysqli_free_result()功能时遇到问题。我正在嵌套查询,似乎当我释放结果时,它会停止初始查询运行其while()函数的循环。我是否使用mysqli_free_result()不正确?如果我将第二个查询的名称从$results更改为$results2,则可以正常使用。似乎变量优于写作存在问题,我认为mysqli_free_result()会有所帮助,但显然不是。

这是一个类似于我想要做的示例代码。

<?php

// 1st query
$query = '';

// Run the 1st query
if( $results = mysqli_query( $db_connect, $query ) ) {
    while( $result = mysqli_fetch_assoc( $results ) ) {

        // 2nd query
        $query = '';

        // Run the 2nd query
        if( $results = mysqli_query( $db_connect, $query ) ) {
            while( $result = mysqli_fetch_assoc( $results ) ) {

            }
            mysqli_free_result( $results );
        }

    }
    mysqli_free_result( $results );
}

?>

2 个答案:

答案 0 :(得分:2)

尝试为内部查询使用不同的变量名称。目前,您在外部$results循环的每次运行中都会覆盖while

<?php

// 1st query
$query = '';

// Run the 1st query
if( $results = mysqli_query( $db_connect, $query ) ) {
    while( $result = mysqli_fetch_assoc( $results ) ) {

        // 2nd query
        $query = '';

        // Run the 2nd query
        if( $results_2 = mysqli_query( $db_connect, $query ) ) {
            while( $result_2 = mysqli_fetch_assoc( $results_2 ) ) {

            }
            mysqli_free_result( $results_2 );
        }

    }
    mysqli_free_result( $results );
}

?>

更新:正如其他评论和答案中已经指出的那样,mysqli_stmt_free_result 释放所提供的语句句柄的内存,如文档http://www.php.net/manual/en/mysqli-stmt.free-result.php中所述。正如@andrewsi指出的那样,问题是变量范围问题。

答案 1 :(得分:1)

免费结果释放句柄,结果句柄不是堆栈,您需要以不同方式命名结果句柄,除非您希望它们覆盖。

“释放与结果相关的记忆。” - php docs