sirve que parameter para mysqli_result mysqli_query mysqli_free_result mysqli_fetch_assoc mysqli_fetch_array mysqli_error mysqli_close mysql_free_result expects php mysqli

php - que - mysqli_free_result necesario?



mysqli_free_result() expects parameter 1 to be mysqli_result (3)

Estaba revisando mi código y leí que se recomendó usar mysqli_free_result cuando ya no se necesita el objeto resultante. Pero después de ver que cada consulta se envía a la variable $result repetidamente a lo largo del script, me pregunto si mysqli_free_result sería realmente necesario. Parece que cada vez que se ejecuta una consulta, la variable $result ya se está limpiando y configurando con un nuevo resultado. Sólo curiosidad si alguien tiene alguna entrada en esto.


En realidad, es necesario, ya que puede generar una gran carga en el servidor cuando se realizan muchas solicitudes. Así que preferiblemente, deberías usarlo.

Algunos otros casos en los que sabe que esta consulta va seguida de otra consulta para que no tenga que usarla.


Está saturando el código. Esta no es una razón basada en la funcionalidad para eliminar mysqli_free_result , pero en mi opinión es una razón válida. Considere el fragmento de abajo.

No guardará una gran cantidad de memoria liberando consultas de registro fetch-a-single. Omítalos a menos que sepa que son necesarios: cuando un script usa más memoria de la que puede asignar (rara vez lo es).

Otra razón para liberar estos recursos sería una restricción a nivel del sistema operativo sobre la cantidad de manejadores de archivos abiertos. Sin embargo, creo que todas las consultas pasan por esta conexión o un identificador de archivo o socket.

// Share PDF if ($_REQUEST[''do''] == ''sharePDF'') { - $sql = "SELECT * FROM c_document WHERE doc_id = $doc_id"; - $res = mysql_query($sql); - $doc_row = mysql_fetch_assoc($res); - mysql_free_result($res); - $d_name = $doc_row[''d_name'']; - $templ_id = $doc_row[''templ_id'']; - $sql = "SELECT * FROM c_template WHERE templ_id = $templ_id"; - $res = mysql_query($sql); - $templ_row = mysql_fetch_assoc($res); - mysql_free_result($res); + + $doc_row = qAssocOne("SELECT * FROM c_document WHERE doc_id = $doc_id"); + $templ_row = qAssocOne("SELECT * FROM c_template WHERE templ_id = {$doc_row[''templ_id'']}") ; + $params = array( ''share_pdf_core_id=''.$templ_row[''share_pdf_core_id''], ''share_pdf_create_id=''.$templ_row[''share_pdf_create_id''], @@ -193,7 +187,7 @@ if ($_REQUEST[''do''] == ''sharePDF'') { ''doc_id=''.intval($_REQUEST[''doc_id'']), ''pdf1=''.urlencode($_REQUEST[''pdf'']), ''pdf2='', - ''name=''.urlencode($d_name), + ''name=''.urlencode($doc_row[''d_name'']), ''select_output=''.$templ_row[''select_output''] ); $params = join("&",$params);

Las líneas sustraídas son basura absoluta en mi opinión; Diez líneas vs dos. Por favor...

En respuesta al comentario de Your Common Sense:

A nadie le debe importar lo que hace la función. Ilustra un punto. Además, el nombre te da pistas. Q para la consulta, Assoc para obtener (hidratar) un hash en lugar de una matriz numérica. One para un registro y no un conjunto de registros. Si realmente no puedes adivinar lo que hace, busca en línea. El código está disponible. Primer golpe en google.

No es ajeno. Una gran cantidad de código PHP se ve así. Mi punto se afirma en la respuesta. No es necesario porque borrar un conjunto de resultados con una fila no le ahorrará mucha memoria. No es necesario porque desordena el código y confunde la intención o la lógica empresarial.

ten un buen día


Nunca es estrictamente necesario, pero es una buena práctica vigilar los recursos que está utilizando y saber cuándo ya no los necesita.

Es un esfuerzo mínimo para colocar esa línea de código adicional, así que solo lo haría cada vez que termines con un conjunto de resultados. Tiene la ventaja adicional de dejarle claro a alguien que está leyendo tu código cuando hayas terminado con un recurso.