我在使用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 );
}
?>
答案 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