Du mangler et par ting på serversiden for at få dette til at fungere.
Først, som @RiggsFilly påpegede, skal du bruge en WHERE-sætning i sætningen. Betingelsen bør være at se efter transaktioner, der er nyere end sidst afsendte.
Til det skal du holde styr på tidsstemplet for den sidst sendte besked.
Serveren skal kun sende en besked, hvis forespørgslen, nu med betingelsen, returnerer et resultat.
Endelig skal hele rutinen til at tjekke for nye transaktioner og sende en besked, hvis den findes, holdes i en sløjfe.
<?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);
}