Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Serverseitige Ereignisse mit PHP und MySQL

Ihnen fehlen ein paar Dinge auf der Serverseite, damit dies funktioniert.

Zunächst müssen Sie, wie @RiggsFilly betonte, eine WHERE-Klausel in der Anweisung verwenden. Die Bedingung sollte sein, nach Transaktionen zu suchen, die neuer sind als die zuletzt gesendete.

Dazu müssen Sie sich den Zeitstempel der zuletzt gesendeten Nachricht merken.

Der Server soll nur dann eine Nachricht senden, wenn die Abfrage, jetzt mit der Bedingung, ein Ergebnis liefert.

Schließlich muss die gesamte Routine, nach neuen Transaktionen zu suchen und eine Nachricht zu senden, wenn sie gefunden wird, in einer Schleife gehalten werden.

<?php 
include 'conn.php'; // database connection

header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");

$query = "SELECT TimeStamp, CardNo FROM transactions WHERE TimeStamp > ?";
$stmt = $conn->prepare($query);
$ts = time();

while(true) 
{
    if ($result = $stmt->execute([$ts])) {
        $row = $result->fetch_assoc();
        echo "data: " . $row['CardNo'] . "\n\n";
        $ts = $row['TimeStamp'];
        flush();
    }
    sleep(2);
}