Mysql
 sql >> Database >  >> RDS >> Mysql

Eventi lato server con PHP e MySQL

Ti mancano un paio di cose sul lato server per farlo funzionare.

Innanzitutto, come ha sottolineato @RiggsFilly, è necessario utilizzare una clausola WHERE nell'istruzione. La condizione dovrebbe essere quella di cercare transazioni più recenti rispetto all'ultimo inviato.

Per questo, devi tenere traccia del timestamp dell'ultimo messaggio inviato.

Il server dovrebbe inviare un messaggio solo se la query, ora con la condizione, restituisce un risultato.

Infine, l'intera routine per verificare la presenza di nuove transazioni e inviare un messaggio se trovato deve essere tenuta in loop.

<?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);
}