Скорее всего, причина в том, что вы используете внутри цикла те же переменные, которые используются для проверки цикла. То есть нашли несколько записей, положили в `$query`, затем внутри цикла в этот же `$query` кладете результат запроса с поиском по айди, обрабатываете и вот уже в `$query` ничего нет.
Если не помогло, надо отлаживать.
Чтобы локализовать проблему, попробуйте упростить код, например оставить внутри цикла while только echo "ok\n";
Если выполнится несколько раз, значит проблема внутри цикла, если один раз, значит проблема в запросе в БД.
В первом случае что-то прерывает цикл, возможно исключение. Заключите код в try ... catch и выведите текст ошибки, имя файла и строку.
Альтернативно, можно в коде раскидать маркеры выполнения этапов