Aby to fungovalo, na straně serveru vám chybí několik věcí.
Za prvé, jak zdůraznil @RiggsFilly, musíte v prohlášení použít klauzuli WHERE. Podmínkou by mělo být vyhledávání transakcí, které jsou novější než naposledy odeslaná.
Za tímto účelem musíte sledovat časové razítko poslední odeslané zprávy.
Server by měl odeslat zprávu pouze v případě, že dotaz, nyní s podmínkou, vrátí výsledek.
Nakonec musí být celá rutina pro kontrolu nových transakcí a odeslání zprávy, pokud je nalezena, udržována ve smyčce.
<?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);
}