IdFirstnameLastname
1JohnDoe
2JohnDoe
4MaryMoe
5JulieDooley
6JohnDoe
7MaryMoe
8JulieDooley
9JohnDoe
10JohnDoe
11JohnDoe
12JohnDoe
13MaryMoe
14JulieDooley
15JohnDoe
16MaryMoe
17JulieDooley
18JohnDoe
19JohnDoe
20JohnDoe
21MaryMoe
22JulieDooley
23JohnDoe
24MaryMoe
25JulieDooley
26JohnDoe
27JohnDoe
28MaryMoe
29JulieDooley
30JohnDoe
31JohnDoe
32MaryMoe
33JulieDooley
34JohnDoe
35JohnDoe
36MaryMoe
37JulieDooley
38JohnDoe
39JohnDoe
40MaryMoe
41JulieDooley
42JohnDoe
43MaryMoe
44JulieDooley
45JohnDoe
46JohnDoe
47JohnDoe
48MaryMoe
49JulieDooley
50JohnDoe
51MaryMoe
52JulieDooley

Codi en PHP

<!DOCTYPE html>
<html lang="ca">
    <head>
        <title>Exemple Seleccio Dades Guillem Serrat</title>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <?php
            echo "<table style='border: solid 1px black;'>";                    // Crea la taula
            echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";     // Crea una fila per les capçeleres de la taula

            // Creem una classe que és filla de RecursiveIteratorIterator, una classe de PHP que permet recórrer estructures d'arrays
            class TableRows extends RecursiveIteratorIterator {
                // Sempre es crida al constructor 1 vegada abans de começar a iterar sobre un array
                function __construct($it) { 
                    parent::__construct($it, self::LEAVES_ONLY);
                    // Amb l'operador LEAVES_ONLY ens assegurem que únicament agafa el valor i res més
                }

                // Creem una funció anomenada current. L'objectiu de la funció és crear una cel·la i agafar el valor d'un registre SQL.
                // Aquesta funció la crida automàticament per l'objecte RecursiveIteratorIterator (no cal cridar-la, es fa sol)
                function current() :string { // Afegim :string per evitar el missatge "deprecated". Indiquem que retorna un String
                    return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
                }

                // Creem una funció anomenada beginChildren. L'objectiu de la funció és crear una nova fila.
                // Aquesta funció la crida automàticament per l'objecte RecursiveIteratorIterator (no cal cridar-la, es fa sol)
                // Aquesta funció és cridada cada vegada que es fa una iteració (1 volta, 1 registre en SQL)
                function beginChildren() :void { // Afegim :void per evitar el missatge "deprecated". Indiquem que no retorna res
                    echo "<tr>"; // Creem la fila
                }

                //Creem una funció anomenada endChildren L'objectiu de la funció és tancar la fila creada per la funció endChildren
                // Aquesta funció la crida automàticament per l'objecte RecursiveIteratorIterator (no cal cridar-la, es fa sol)
                // Aquesta funció és cridada cada vegada que es fa una iteració (1 volta, 1 registre en SQL)
                function endChildren() :void { // Afegim :void per evitar el missatge "deprecated"
                    echo "</tr>" . "\n"; // Tanquem la fila
                }

                // Resum del Flux de l'Iteració
                // 1. Inici de l'Iteració (Per a la primera fila): Es crida beginChildren() --> Imprimeix <tr>.
                // 2. Iteració de la Primera Columna (id): Es crida current() --> Imprimeix <td ...>1</td>.
                // 3. Iteració de la Segona Columna (firstname): Es crida current() --> Imprimeix <td ...>John</td>.
                // 4. Iteració de la Tercera Columna (lastname): Es crida current() --> Imprimeix <td ...>Doe</td>.
                // 5. Fi de l'Iteració de la Fila: Es crida endChildren() --> Imprimeix </tr>\n.
                // 6. Repetició (Per a la següent fila), tornant al punt 1.


            }

            $servername = "127.0.0.1";
            $username = "root";
            $password = "fjeclot";
            $dbname = "myDBPDO";

            try {
                // Definim un nou objecte de la classe PDO amb els atributs: host al que ens connectarem, el nom d'usuari i contrasenya.
                $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

                // A través de la funció setAttribute, agafem el tipus d'error en cas de que n'hi hagi algun
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                // Definim una preparació en la variable $stmt.
                $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");

                // Executem la preparació
                $stmt->execute();

                // Imprimim la taula fent servir la crida automàtica a les funcions de la classe RecursiveArrayIterator
                $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
                foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
                    // new RecursiveArrayIterator($stmt->fetchAll()) converteix els registres en iteratius
                    echo $v; // Imprimeix tota la fila HTML ja processada per les funcions
                }
            } catch(PDOException $e) {                      // En cas de que hi hagi un error, PHP llença una PDOException, i la variable $e agafa aquesta excepció
                echo "Error: " . $e->getMessage();          // Si no s'executa correctament, imprimeix el missatge d'error de PDOException
            }
            $conn = null;
            echo "</table>";
        ?>
        
        <h1>Codi en PHP</h1>
        <?php
        show_source("ex7.php");
        ?>
    </body>
</html>