略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: mysqli_result::free

2024-12-21

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_resultFrees the memory associated with a result

说明

面向对象风格

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

过程化风格

mysqli_free_result(mysqli_result $result): void

Frees the memory associated with the result.

参数

result

仅以过程化样式:由 mysqli_query()mysqli_store_result()mysqli_use_result()mysqli_stmt_get_result() 返回的 mysqli_result 对象。

返回值

没有返回值。

参见

add a noteadd a note

User Contributed Notes 4 notes

up
12
jack_action100 at hotmail dot example dot com
3 years ago
If you are STILL getting this error, even after freeing your results:
Internal SQL Bug: 2014, Commands out of sync; you can't run this command now

You may have a stored procedure in your query.   A procedure can return more than one result set, and it will always return one extra empty result set that carries some meta information on the procedure call itself, especially error information. ( source:  https://bugs.mysql.com/bug.php?id=71044 )

While calling single procedures, with one SELECT in them, using mysqli->query("CALL `stored_procedure`();"), I had to do the following to make it work between two calls:

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

It has no negative impact if you are not calling a stored procedure.
up
0
polygon dot co dot in at gmail dot com
7 months ago
We should free the mysql results using mysqli_free_result respectively or else this will consume your server RAM resource.

This is demonstrated as below

<?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

?>

Output below.

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

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

So, One can observer there is memory usage after the query is executed. The results are returned by DB server to the web server instantaniously once the query execution is over. The results present on web server are then processed for fetching from the resource link on web server.

Also this is observed that there is lesser memory usage after using mysqli_free_result because the resources stored on web server for respective query are freed by providing respective resource link.
up
-1
Vector at ionisis dot com
12 years ago
If you are getting this error:
Internal SQL Bug: 2014, Commands out of sync; you can't run this command now

Then you never called mysqli_result::free(), mysqli_result::free_result(), mysqli_result::close(), or mysqli_free_result() in your script, and must call it before executing another stored procedure.
up
-32
Anonymous
12 years ago
Freeing the memory associated with a result means that the references returned by mysqli_fetch_object (or equivalent) are cleared. Thus if you should pass an object pointing to a database row _by reference_, every call of mysqli_free_result will discard the referenced data.

官方地址:https://www.php.net/manual/en/mysqli-result.free.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3