Hm..auto vivification?
wenn du $query[$i+1] in der if Bedingung ansprichst, was ist dann $i+1? Ich kann mir gut vorstellen, das du $i mit 0 initialisierst und dann immer eins hochzählst. Wenn du dich nun im eigentlich letzten Durchlauf von @query befindest, ist $i genau gleich dem letzten Index von @query. Du fragst dann $query[$i+1] ab und auto vivifizierst damit ein neues element im @query array, was dann oben in while(@query) für einen erneuten durchlauf sorgt. Und da hast du deine Endlossschleife.
Cruz