Sobre el error 2027 de MySQL, y las funciones store_result vs use_result de PHP
Me he acostumbrado a utilizar procedimientos almacenados para hacer las consultas y operaciones necesarias a una base de datos. Por ello, tengo un pequeño conjunto de clases que me agilizan esa tarea, y ya tengo mucho tiempo utilizándolo sin ningún problema... hasta ahora.
Sucede que implementé un procedimiento almacenado que, internamente, mandaba llamar a otros procedimientos almacenados que regresaban información. La diferencia de este caso particular con otros que ya había utilizado exitosamente fue que estas llamadas a los procedimientos almacenados estaban dentro de un ciclo de procedimiento almacenado principal, lo cual implicaba que existía mucha información que se generaba como resultado, y a partir de ese momento comencé a recibir el error 2027: Malformed packet
por parte de la clase MySQli de PHP.
Después de varias horas de indagación me percaté que el problema radicaba en el uso de la función store_result()
. Al buscar una alternativa a ello, encontré la función use_result()
que, en esencia, la diferencia radica en que la primera utiliza un buffer para almacenar los resultados, y la segunda no utiliza ningún buffer. Al adaptar el código para que ahora se utilice la función use_result()
el error dejó de generarse. De lo cuál concluyo que la cantidad de información recibida era mayor a lo que el buffer podía almacenar, y por ello se generaba ese error.
Nota aparte, la documentación de la función use_result()
no es muy amplia, y no indica muy bien los casos en los que conviene, o es necesario, utilizar dicha función.
Sin embargo, espero que esta información le sirva a alguien más que se encuentre con este problema.
Añadir nuevo comentario