Проблема цикла в реальном времени - PullRequest
0 голосов
/ 11 июля 2011

У меня проблема с архивированием в реальном времени. При переходе к следующей итерации следует сначала проверить status на наличие обновлений (status= 0), прежде чем перейти к следующей итерации.

Поле статуса может быть обновлено где-то еще ...

Например:

<?php
$SQL = "SELECT * FROM data WHERE status = 0";
$query = $db->prepare($SQL);
$query->execute();

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    print_r($row);
    print("\n\n");
    sleep(5);
}
?>

Пока php-скрипт запущен / зациклен, в консоли mysql я быстро сделал:

UPDATE data SET status = 1

По-прежнему отображаются все записи, даже если я обновил статус. Как можно решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

Результирующий набор вычисляется только один раз.Если вы хотите увидеть промежуточные обновления, вам нужно выполнить еще одну инструкцию SELECT.

0 голосов
/ 11 июля 2011

Вы должны запрашивать базу данных каждый раз, когда хотите получить данные для флеша. В противном случае вы будете повторять только старые извлеченные данные.

<?php
$SQL = "SELECT * FROM data WHERE status = 0";

while (true) { // set the condition you need here (eg: time)

    // I don't know PDO enough to know if prepare can be executed out of the loop
    $query = $db->prepare($SQL);

    // re-query the database to get the new statuses
    $query->execute();

    // process the data
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
        print("\n\n");
    }

    // sleep when all the row have been processed
    sleep(5);
}
?>
0 голосов
/ 11 июля 2011

Когда вы входите в цикл while, вы давно вышли из БД, теперь вы просто отображаете то, что было отправлено обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...