En lugar de leer el resultado completo de la consulta de la base de datos en una variable con fetchAll(), obténgalo fila por fila:
while($row = $query->fetch()) { ... }
En lugar de leer el resultado completo de la consulta de la base de datos en una variable con fetchAll(), obténgalo fila por fila:
while($row = $query->fetch()) { ... }