| Id | Firstname | Lastname |
|---|
| 1 | John | Doe |
| 42 | John | Doe |
| 18 | John | Doe |
| 19 | John | Doe |
| 20 | John | Doe |
| 39 | John | Doe |
| 38 | John | Doe |
| 23 | John | Doe |
| 35 | John | Doe |
| 34 | John | Doe |
| 27 | John | Doe |
| 31 | John | Doe |
| 15 | John | Doe |
| 30 | John | Doe |
| 2 | John | Doe |
| 47 | John | Doe |
| 46 | John | Doe |
| 6 | John | Doe |
| 45 | John | Doe |
| 26 | John | Doe |
| 9 | John | Doe |
| 10 | John | Doe |
| 11 | John | Doe |
| 12 | John | Doe |
| 37 | Julie | Dooley |
| 41 | Julie | Dooley |
| 33 | Julie | Dooley |
| 44 | Julie | Dooley |
| 49 | Julie | Dooley |
| 29 | Julie | Dooley |
| 14 | Julie | Dooley |
| 22 | Julie | Dooley |
| 5 | Julie | Dooley |
| 25 | Julie | Dooley |
| 8 | Julie | Dooley |
| 17 | Julie | Dooley |
| 7 | Mary | Moe |
| 4 | Mary | Moe |
| 13 | Mary | Moe |
| 48 | Mary | Moe |
| 16 | Mary | Moe |
| 40 | Mary | Moe |
| 21 | Mary | Moe |
| 24 | Mary | Moe |
| 36 | Mary | Moe |
| 28 | Mary | Moe |
| 32 | Mary | Moe |
| 43 | Mary | Moe |
Codi en PHP
<!DOCTYPE html>
<html lang="ca">
<head>
<title>Exemple Ordre Order By 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 ORDER BY lastname");
// 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("ex9.php");
?>
</body>
</html>