Brakuje Ci kilku rzeczy po stronie serwera, aby to działało.
Po pierwsze, jak zauważył @RiggsFilly, w oświadczeniu należy użyć klauzuli WHERE. Warunkiem powinno być szukanie transakcji, które są nowsze niż ostatnio wysłany.
W tym celu musisz śledzić znacznik czasu ostatniej wysłanej wiadomości.
Serwer powinien wysłać wiadomość tylko wtedy, gdy zapytanie, teraz z warunkiem, zwróci wynik.
Wreszcie, cała procedura sprawdzania nowych transakcji i wysyłania wiadomości, jeśli zostanie znaleziona, musi być utrzymywana w pętli.
<?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);
}