3

新しいデータがあるかどうかを確認するために、10 秒ごとに外部サーバーからデータベースをチェックするアプリケーションを作成する必要があります。現在、2つのJSON(古いJSONとサーバーからフェッチされた新しいJSON)を比較してデータがサーバーに変更されたかどうか、およびユーザーにアラートがあるかどうかを確認するJavaScriptがあります。しかし、それはこのアプリケーションで必要なものではありません。ユーザーは、データが変更されたときではなく、データが新しいときにのみアラートを受け取る必要があります。

MYSQL を照会する PHP コードを使用してこれを行うことができると考えていました。クエリ num_results が 0 の場合、ユーザーに通知されたときに num_results が 0 を超えるまでループします。このアプリケーションでは、ユーザーが新しいデータを取得する限り、0.1 秒または 10 秒でユーザーが新しいデータを利用できるようになるかどうかは問題ではありません。これは、MYSQL チェックを実行しようとした方法ですが、機能していません。

<?php
include 'config.php';

if(isset($_GET['ID'])) {
    $maxLoop = 20;    
    while($maxLoop--) {
        $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        try {
            $sth = $dbh->prepare('select * from testit where id = :id');
            $sth->bindParam(':id',$_GET['ID'],PDO::PARAM_INT);
            $sth->execute();
            if($sth->rowCount()>0) {
                $results = $sth->fetchAll(PDO::FETCH_OBJ);
                echo '{"key":'. json_encode($results) .'}';
                exit; // Found new data, end loop and script
            }
        } catch(PDOException $e) {
            break;   
        }
        sleep(3);    
    } // end while
} // end if

では、このコードを変更して機能させるにはどうすればよいでしょうか。それとも、これを行う JavaScript を作成するだけでよいのでしょうか。もしそうなら、データが変更されたかどうかを確認するだけでなく、データが新しいかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

3

「新しい」データをどのように記録しますか? タイムスタンプはありますか?auto_increment 主キー フィールド?

ポーリングの最も簡単な方法は、最新の既知の ID/タイムスタンプを追跡し、より高い ID/新しいタイムスタンプを持つものがあるかどうかを確認することです。

そのままでは、あなたの方法は非常に非効率的です。テーブル内のすべてのレコードを選択し、mysql/pdo にディスクからそのデータのフェッチを強制的に開始させるなど...行数を取得した後、単純に破棄します。より効率的な方法は、select count(*) ...その値をチェックすることです。これにより、mysql がディスクから実際の行データのフェッチを開始する必要がなくなります。また、一部のテーブル タイプ (特に myisam) では、count(*) 操作が非常に高速です。

于 2012-04-18T05:03:51.833 に答える
1

アプリケーションで 10 秒ごとに変更をチェックする場合は、 を使用AJAXasyncronousてサーバー上の php ファイルにリクエストを送信する必要があります。php ファイルではselect * from testit where condition=false、「新しいデータ」を取得するだけで済みます。の基本を学べるリンクは次のAJAXとおりです 。 http://www.w3schools.com/ajax/default.asp

于 2012-04-18T07:09:16.673 に答える