Je mist een aantal dingen aan de serverkant om dit te laten werken.
Ten eerste, zoals @RiggsFily opmerkte, moet je een WHERE-component in de instructie gebruiken. De voorwaarde zou moeten zijn om te zoeken naar transacties die nieuwer zijn dan de laatst verzonden.
Daarvoor moet je de tijdstempel van het laatst verzonden bericht bijhouden.
De server zou alleen een bericht moeten verzenden als de zoekopdracht, nu met de voorwaarde, een resultaat oplevert.
Ten slotte moet de hele routine om te controleren op nieuwe transacties en een bericht te sturen als deze wordt gevonden, in een lus worden gehouden.
<?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);
}