@khodos_dmitry

Почему не работает такая конструкция while?

while ($i<5) {
		$query = "SELECT DISTINCT(`url`) FROM `str` WHERE `parsed` = 0";
		$result = mysqli_query($link, $query) or die('Не могу взять из базы url '.mysqli_error($link));
		$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
//		if (count($rows) == 0) break;
		$i++;
		foreach ($rows as $row) {
			$url = $row['url'];
	//		$options[CURLOPT_PROXY] = $proxy_array[ mt_rand(0, count($proxy_array) - 1) ];
			$AC->request($url, 'GET', NULL, NULL, NULL);
		}
	}

Она должна выбирать не спаршеные страницы из базы, потом в функции request страница парсится и в базу добавляются новые url.
Потом выбираются новые url, парсятся и тд.
Но, почему то не работает корректно. Так парсит только 1 раз.
Когда запускаешь раз за разом без while, то все работает. Но, когда while ставишь, то выполняется только один раз, сколько бы циклов не было. Когда while(true) if (count($rows) == 0) break; выполняется бесконечно, и в базе ничего не меняется.
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
Вообще while очень простая конструкция, и если $i = 0, то выполнится содержимое ровно 5 раз(естественно если в содержимом нет какой-то остановки)

Первое: выведите внутри цикла вардамп, чтобы судить о количестве итераций цикла осознанно.
Пример:
while ($i<5) {
   var_dump($i);
...


Если по очереди будут выведены 0, 1, 2, 3, 4 - то считаем что while больше работает чем не работает и переходим ко второму))

Второе: проверить код внутри цикла, сказать что он странный - ничего не сказать.
Зачем делать 5 одинаковых запросов в бд? У вас что-то меняется в бд за время между итерациями? Конкретно в этом коде ничего такого нет, судя по этому он в $rows запишет 5 раз одно и то же. А соответственно и риквесты внутри второго цикла тоже будут повторяться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы