mysqli_result::free

mysqli_result::close

mysqli_result::free_result

mysqli_free_result

(PHP 5, PHP 7, PHP 8)

mysqli_result::free -- mysqli_result::close -- mysqli_result::free_result -- mysqli_free_result释放与结果关联的内存

描述

面向对象风格

public mysqli_result::free(): void
public mysqli_result::close(): void
public mysqli_result::free_result(): void

过程式风格

mysqli_free_result(mysqli_result $result): void

释放与结果关联的内存。

参数

result

仅限过程式风格:由 mysqli_query()mysqli_store_result()mysqli_use_result()mysqli_stmt_get_result() 返回的 mysqli_result 对象。

返回值

不返回任何值。

参见

添加笔记

用户贡献笔记 4 个笔记

18
jack_action100 at hotmail dot example dot com
5 年前
如果你仍然遇到这个错误,即使你在释放结果之后
内部 SQL 错误:2014,命令不同步;你现在无法运行此命令

你的查询中可能有一个存储过程。一个过程可以返回多个结果集,并且它总是返回一个额外的空结果集,其中包含有关过程调用本身的一些元信息,尤其是错误信息。(来源:https://bugs.mysql.com/bug.php?id=71044 )

在调用单个过程时,其中只有一个 SELECT,使用 mysqli->query("CALL `stored_procedure`();"),我不得不做以下操作才能让它在两个调用之间工作

<?php
$result
->free();
$mysqli->next_result();
?>

如果你没有调用存储过程,它不会产生任何负面影响。
0
polygon dot co dot in at gmail dot com
2 年前
我们应该分别使用 mysqli_free_result 释放 mysql 结果,否则这会消耗你的服务器 RAM 资源。

这在下面演示

<?php

$link
= mysqli_connect('Hostname','Username','Password','Database');

echo
'<br/>Memory Usage Before Query = '.memory_get_usage(false); // 449464 bytes

$resultResource = mysqli_query($link, 'SELECT * FROM test');

echo
'<br/>Memory Usage after Query = '.memory_get_usage(false); // 466528 bytes

$result = array();
while (
$result[] = mysqli_fetch_assoc($resultResource)) {}

echo
'<br/><br/>Memory Usage Before Free Result = '.memory_get_usage(false); // 474208 bytes

mysqli_free_result($resultResource);

echo
'<br/>Memory Usage After Free Result = '.memory_get_usage(false); // 457336 bytes

?>

以下输出。

Memory Usage Before Query = 449464
Memory Usage after Query = 466528

Memory Usage Before Free Result = 474208
Memory Usage After Free Result = 457336

所以,可以观察到查询执行后有内存使用。查询执行完毕后,DB 服务器会立即将结果返回给 Web 服务器。Web 服务器上的结果随后会在 Web 服务器上的资源链接上进行处理,以便从中获取。

还观察到,使用 mysqli_free_result 后内存使用量更少,因为通过提供相应的资源链接,为相应查询存储在 Web 服务器上的资源被释放。
1
Vector at ionisis dot com
14 年前
如果你遇到这个错误
内部 SQL 错误:2014,命令不同步;你现在无法运行此命令

那么你从未在你的脚本中调用 mysqli_result::free()、mysqli_result::free_result()、mysqli_result::close() 或 mysqli_free_result(),并且必须在执行另一个存储过程之前调用它。
-35
匿名
14 年前
释放与结果关联的内存意味着 mysqli_fetch_object(或等效项)返回的引用将被清除。因此,如果你应该按引用传递指向数据库行的对象,每次调用 mysqli_free_result 都会丢弃引用的数据。
To Top