Лишнее условие при организации цикла


Исходный код

$id = 0;
while (!$id || mysql_error()) {
    $id = rand(1, 10000000);
    mysql_query("INSERT INTO `table` (id) VALUES ('".$id."'");
}

Что не так в этом коде

Тело цикла должно выполниться минимум один раз, но должно повторяться бесконечно, пока будут возникать ошибки БД (а они будут возникать в случае, если в таблицу добавляется уже существующий в ней идентификатор).

Очевидно, что предназначение этого кода — генерация уникальных не последовательных идентификаторов.

Для того, чтобы обеспечить выполнение первой попытки генерации идентификатора, был придуман хитрый финт с $id = 0. Однако же этот финт не понадобится, если воспользоваться циклом, который сам по себе обеспечивает минимум одно выполнение его тела (конструкции для организации таких циклов существуют во всех языках, которые я знаю).

Вариант рефакторинга

do {
    $id = rand(1, 10000000);
    mysql_query("INSERT INTO `table` (id) VALUES ('".$id."'");
} while (mysql_error())