Codi en PHP
<!DOCTYPE html>
<html lang="ca">
<head>
<title>Exemple Propi Ordre WHERE 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.
}
$servidor = "127.0.0.1";
$usuari = "root";
$contrasenya = "fjeclot";
$nomDB = "dbGserrat";
$nomTaula = "Clients";
try {
// Definim un nou objecte de la classe PDO amb els atributs: host al que ens connectarem, el nom d'usuari i contrasenya.
$connexio = new PDO("mysql:host=$servidor;dbname=$nomDB", $usuari, $contrasenya);
// A través de la funció setAttribute, agafem el tipus d'error en cas de que n'hi hagi algun
$connexio->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Definim una preparació en la variable $consultaPreparadat.
$consultaPreparadat = $connexio->prepare("SELECT id, nom, cognom, mail FROM $nomTaula WHERE mail LIKE '%microsoft%'");
// Executem la preparació
$consultaPreparadat->execute();
// Imprimim la taula fent servir la crida automàtica a les funcions de la classe RecursiveArrayIterator
$resultat = $consultaPreparadat->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($consultaPreparadat->fetchAll())) as $k=>$v) {
// new RecursiveArrayIterator($consultaPreparadat->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 "No s'ha pogut mostrar les dades" . "<br>" . $e->getMessage(); // Si no s'executa correctament, imprimeix el missatge d'error de PDOException
}
$connexio = null;
echo "</table>";
?>
<h1>Codi en PHP</h1>
<?php
show_source("ex8Propi.php");
?>
</body>
</html>