|
|
|
| задача:
проверить наличие определенных строк в БД и:
если нет - заснуть на время, потом снова проверить
если есть - продолжить выполнять действия
<?php
set_time_limit(0);
ignore_user_abort(true);
... // коннект к базе
// проверяем наличие источника 1 в базе
$res1=mysql_query("SELECT .... FROM ... WHERE");
$resnum1=mysql_num_rows($res1);
while ($resnum1==0) { sleep(5); }
// проверяем наличие источника 2 в базе
$res2=mysql_query("SELECT .... FROM ... WHERE");
$resnum2=mysql_num_rows($res2);
while ($resnum2==0) { sleep(5); }
// если присутствует и источник1, и источник2 продолжаем действия
....
?>
|
Скрипт засыпает, как положено. Но, когда требуемые строки в БД появляются, то он все-равно спит и не продолжает действия. В чем ошибка? | |
|
|
|
|
|
|
|
для: Gandzas
(22.01.2008 в 23:37)
| | в цикле надо не сравнивать, а запрашивать и сравнивать, ибо запрос идет один, и в цикле не меняются полученные из бд данные
while (true)
{
mysql_query(...);
if (mysql_num_rows(...)) break;
sleep(5);
}
|
| |
|
|
|
|
|
|
|
для: bronenos
(22.01.2008 в 23:50)
| |
set_time_limit(0);
ignore_user_abort(true);
... // коннект к базе
// проверяем наличие источника 1 в базе
while (true)
{
$res1=mysql_query("SELECT .... FROM ... WHERE");
$resnum1=mysql_num_rows($res1);
if ($resnum1==0) break; sleep(5);
}
// проверяем наличие источника 2 в базе
while (true)
{
$res2=mysql_query("SELECT .... FROM ... WHERE");
$resnum2=mysql_num_rows($res2);
if ($resnum2==0) break; sleep(5);
}
// если присутствует и источник1, и источник2 продолжаем действия
....
?>
|
Так? | |
|
|
|
|
|
|
|
для: Gandzas
(23.01.2008 в 00:06)
| | не работает( | |
|
|
|
|
|
|
|
для: Gandzas
(23.01.2008 в 00:06)
| | Давайте сравним...
while (true)
{
mysql_query(...);
if (mysql_num_rows(...)) break;
sleep(5);
}
|
while (true)
{
$res1=mysql_query("SELECT .... FROM ... WHERE");
$resnum1=mysql_num_rows($res1);
if ($resnum1==0) break; sleep(5);
}
|
1. Необязательно пользоваться временной переменной для кол-ва рядов (хотя это не ошибка)
2. if (... == 0) break; (но у меня [== 0] опущена, потому что [== 0] аналогично [!] и [== false], иными словами, если взять числами, то [> 0])
3. Вы break и sleep написали в одной строчке, видимо полагая, что они оба вызовутся после выполнения условия. Это не так. Без [{] и [}] выполнится только первый оператор, сразу после условия, а второй выполнится, если условие ложно и не выполнится если истинно (ибо break прервет цикл и выйдет вовне) | |
|
|
|
|
|
|
|
для: bronenos
(23.01.2008 в 00:33)
| | Спасибо. Поняла. | |
|
|
|