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.

Etiquetas: 

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
CAPTCHA
Esta pregunta es para asegurarnos que eres una persona y prevenir mensajes automáticos.
Image CAPTCHA
Enter the characters shown in the image.