是的,如果您使用无缓冲查询并且尚未从 MySQL 中提取所有数据,则此函数可能会增加内存使用量。在这种情况下,MySQL API 存在问题:您希望释放结果,但不想关闭连接。现在 MySQL 只有在提取所有数据后才会接受另一个查询,因此 API 现在必须在调用 mysql_free_result() 时提取其余数据。
因此,只有在提取所有数据(并且需要它)时才使用无缓冲查询。
(PHP 4, PHP 5)
mysql_free_result — 释放结果内存
此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中删除。应改用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此函数的替代方法包括
null
的值分配给 PDO 对象,或使用PDOStatement::closeCursor()
mysql_free_result() 将释放与结果标识符 result
相关联的所有内存。
mysql_free_result() 仅当您担心用于返回大型结果集的查询使用了多少内存时才需要调用。所有关联的结果内存将在脚本执行结束时自动释放。
如果将非资源用于 result
,则会发出级别为 E_WARNING 的错误。值得注意的是,mysql_query() 仅针对 SELECT、SHOW、EXPLAIN 和 DESCRIBE 查询返回资源。
示例 #1 mysql_free_result() 示例
<?php
$result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
echo '无法运行查询:' . mysql_error();
exit;
}
/* 使用结果,假设我们之后不再需要它 */
$row = mysql_fetch_assoc($result);
/* 现在我们释放结果并继续执行脚本 */
mysql_free_result($result);
echo $row['id'];
echo $row['email'];
?>
注意:
为了向后兼容,可以使用以下已弃用的别名:mysql_freeresult()
是的,如果您使用无缓冲查询并且尚未从 MySQL 中提取所有数据,则此函数可能会增加内存使用量。在这种情况下,MySQL API 存在问题:您希望释放结果,但不想关闭连接。现在 MySQL 只有在提取所有数据后才会接受另一个查询,因此 API 现在必须在调用 mysql_free_result() 时提取其余数据。
因此,只有在提取所有数据(并且需要它)时才使用无缓冲查询。