PHP Conference Japan 2024

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 对象。

返回值

不返回任何值。

参见

添加注释

用户贡献的注释 3 条注释

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
3 年前
我们应该分别使用 mysqli_free_result 释放 mysql 结果,否则这将消耗服务器 RAM 资源。

如下所示

<?php

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

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

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

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

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

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

mysqli_free_result($resultResource);

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

?>

输出如下。

查询前的内存使用量 = 449464
查询后的内存使用量 = 466528

释放结果前的内存使用量 = 474208
释放结果后的内存使用量 = 457336

因此,可以观察到在执行查询后存在内存使用情况。一旦查询执行完成,数据库服务器就会立即将结果返回到 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(),并且必须在执行另一个存储过程之前调用它。
To Top