Me parece que no estás leyendo el mensaje relamente...
Eso es exactamente lo que te está indicando en él:
Cita: Consider using PDOStatement::fetchAll().
Tienes que entender que en un contexto transaccional, .fetch() pone el registro en un array, y avanza el puntero una línea,
sin hacer una interpretacion de lo que hay en ese punto de avance.. El buffer queda activo.
Por su lado
fetchAll(), avanza el puntero hasta el final y sí interpreta que terminó, cerrando el buffer.
NO ES LO MISMO.
En el primer caso, aunque no haya más registros, el buffer no ha sido liberado. En el segundo si.
y eso es lo que el error te dice. Cita: // que segun la documentacion me devuelve un array y en efecto eso es pero tendira que pasarlo por un while o foreach para recuperar solo el valor de la insercion del SP
¿Y cual es el problema de recorrer ese array? SI .fetchAll devuelve un solo registro, seguirá siendo un solo registro (cosa que puedes verificar sin necesidad de recorrerlo), y puedes acceder a su contenido simplemente invocándolo como array de un solo registro.
No te compliques.