Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Eventos do lado do servidor com PHP e MySQL


Você está perdendo algumas coisas no lado do servidor para fazer isso funcionar.

Primeiro, como @RiggsFilly apontou, você precisa usar uma cláusula WHERE na instrução. A condição deve ser procurar transações mais recentes que o último enviado.

Para isso, você precisa acompanhar o timestamp da última mensagem enviada.

O servidor só deve enviar uma mensagem se a consulta, agora com a condição, retornar um resultado.

Por fim, toda a rotina para verificar novas transações e enviar uma mensagem caso seja encontrada deve ser mantida em 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);
}