Исходный код
$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())