$res = sqlite_unbuffered_query($db, $query);

la query deve essere fuori dalla funzione di estrazione. Se ogni volta rifai la query, il WHILE riceve sempre TRUE perche' non si sposta mai dal primo record estratto... e quindi rifa' la query .... ecc. ecc. ed ecco il loop....