-1

我在使用该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 );
}

?>
4

2 回答 2

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 );
}

?>

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

于 2013-07-27T20:06:15.823 回答
1

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

“释放与结果相关的内存。” - php文档

于 2013-07-27T20:06:15.353 回答