Липсват ви няколко неща от страна на сървъра, за да работи това.
Първо, както посочи @RiggsFilly, трябва да използвате клауза WHERE в изявлението. Условието трябва да е да търсите транзакции, които са по-нови отколкото последното изпратено.
За това трябва да следите времевата марка на последното изпратено съобщение.
Сървърът трябва да изпрати съобщение само ако заявката, сега с условието, върне резултат.
И накрая, цялата рутина за проверка за нови транзакции и изпращане на съобщение, ако бъде намерена, трябва да се поддържа в цикъл.
<?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);
}