mysqli_result::free
mysqli_free_result
(PHP 5)
mysqli_result::free -- mysqli_free_result — Frees the memory associated with a result
Description
Object oriented style
void mysqli_result::free
( void
)
void mysqli_result::close
( void
)
void mysqli_result::free_result
( void
)
Procedural style
Frees the memory associated with the result.
Note:
You should always free your result with mysqli_free_result(), when your result object is not needed anymore.
Parameters
-
result
-
Procedural style only: A result set identifier returned by mysqli_query(), mysqli_store_result() or mysqli_use_result().
Return Values
No value is returned.
See Also
- mysqli_query() - Performs a query on the database
- mysqli_stmt_store_result() - Transfers a result set from a prepared statement
- mysqli_store_result() - Transfers a result set from the last query
- mysqli_use_result() - Initiate a result set retrieval
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- MySQL Drivers and Plugins
- Улучшенный модуль MySQL
- Функция mysqli_result::$current_field() - Получает смещение указателя по отношению к текущему полю
- Функция mysqli_result::data_seek() - Перемещает указатель результата на выбранную строку
- mysqli_result::fetch_all
- mysqli_result::fetch_array
- Функция mysqli_result::fetch_assoc() - Извлекает результирующий ряд в виде ассоциативного массива
- Функция mysqli_result::fetch_field_direct() - Получение метаданных конкретного поля
- Функция mysqli_result::fetch_field() - Возвращает следующее поле результирующего набора
- Функция mysqli_result::fetch_fields() - Возвращает массив объектов, представляющих поля результирующего набора
- Функция mysqli_result::fetch_object() - Возвращает текущую строку результирующего набора в виде объекта
- Функция mysqli_result::fetch_row() - Получение строки результирующей таблицы в виде массива
- Функция mysqli_result::$field_count() - Получение количества полей в результирующем наборе
- Функция mysqli_result::field_seek() - Установить указатель поля на определенное смещение
- Функция mysqli_result::free() - Освобождает память занятую результатами запроса
- Функция mysqli_result::$lengths() - Возвращает длины полей текущей строки результирующего набора
- Функция mysqli_result::$num_rows() - Получает число рядов в результирующей выборке
Коментарии
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.
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.
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.