No sólo te está mostrando el error, también te propones dos soluciones.
Por favor, leerlo completo y trata de comprender la idea:
Cita: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active.
Consider using PDOStatement::fetchAll().
Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.NULL
TEn en cuenta que cuando usas transacciones, estas tienen imapcto no sólo en los INSERT, sino en los SELECT, y precisamente te está diciendo que no puedes ejecutar queries mientras el resultado sin completar de obtener de otra todavía está en memoria.
Puedes: 1) Recuperar todo, liberando el buffer de un saque, o 2) poner PDO::MYSQL_ATTR_USE_BUFFERED_QUERYen NULL.
Yo te recomiendo por el momento la primera opción