Live Query (PHP + MySQL)

    Necesitaba crear un panel rápido para que via web, me mostrara un valor actualizado en BBDD sin refrescar el navegador de forma recurrente.
    Para ello, genero un código PHP basado en Ajax para que constantemente (cada X segundos) haga una query en la BBDD.

    El procedimiento es el siguiente:

    Creamos la BBDD y añadimos varios valores:

    DROP DATABASE `DEMO`;
    
    CREATE DATABASE `DEMO`;
    
    use DEMO;
    
    CREATE TABLE `users` (
         id MEDIUMINT NOT NULL AUTO_INCREMENT,
         name CHAR(30) NOT NULL,
         PRIMARY KEY (id)
    );
    
    INSERT INTO `users` (name) VALUES ('user1'),('user2'),('user3'),('user4'),('user5'),('user6');
    

    A nivel código PHP crearemos un fichero llamado db.php que realizará la conexión a la BBDD y una query

    <?php
    $mysqli = new mysqli("localhost", "root", "3st0r1il$.", "DEMO");
    
    if ($mysqli->connect_errno) {
        echo "FAILED TO CONNECT TO MySQL: " . $mysqli->connect_error;
        exit();
    }
    
    $sql = "SELECT `id` FROM `users` ORDER BY `id` DESC LIMIT 1";
    
    $result = mysqli_query($mysqli, $sql);
    if (!$result) {
        die("FAILED TO ACCESS DATABASE: " . mysqli_error());
    }
    
    $rows = mysqli_num_rows($result);
    if ($rows) {
        while ($row = mysqli_fetch_array($result)) {
            echo $row["id"];
        }
    }
    
    mysqli_close($mysqli);
    
    ?>
    

    Ahora crearemos el frontal llamado demo.php que constantemente irá refrescando el

    (class=result) que figura en el php:

    <div class="result"></div>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script>
        function refresh_div() {
            jQuery.ajax({
                url:'db.php',
                type:'POST',
                success:function(results) {
                    jQuery(".result").html(results);
                }
            });
        }
        // 5 SEGUNDOS
        t = setInterval(refresh_div,5000);
    </script>

    Como hemos realizado anteriormente, tenemos el valor 6 como último valor:

    MariaDB [DEMO]> SELECT `id`, `name` FROM `users`;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | user1 |
    |  2 | user2 |
    |  3 | user3 |
    |  4 | user4 |
    |  5 | user5 |
    |  6 | user6 |
    +----+-------+
    6 rows in set (0.009 sec)
    

    En este punto, cuando accedemos a la URL http://10.0.1.71/demo.php el resultado será:

    Ahora, insertamos un nuevo valor (7) en la BBDD (no actualizar el navegador):

    INSERT INTO `users` (name) VALUES ('user7');
    

    Ahora, veremos que automáticamente (update, cada 5 segundos) nos devolverá el nuevo valor:

    Leave a Reply

    Your email address will not be published. Required fields are marked *