La clasificación del torneo
Tu instituto organiza un torneo de fútbol. Cada partido cambia los goles de cada jugador.
Si escribes la clasificación a mano en HTML, tienes que cambiar la página cada vez.
Mejor: los goles viven en una base de datos y la página los lee cada vez que alguien la abre.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Base de datos | Un programa que guarda tablas y contesta consultas. | league |
| PDO | La herramienta de PHP para hablar con una base de datos. Son las siglas de PHP Data Objects. | new PDO($dsn, $user, $pass) |
| Conexión | El canal abierto entre tu script y la base de datos. | $pdo |
| DSN | El texto que dice dónde está la base de datos y cómo se llama. | mysql:host=localhost;dbname=league |
| Fila | Un registro de la tabla. En PHP llega como un array con nombre. | ["name" => "Carmen", "goals" => 9] |
| Excepción | Un aviso de error que puedes atrapar con try y catch. | catch (PDOException $e) |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Quién habla con quién
La base de datos es otro programa, que normalmente corre en el servidor.
Tu script PHP no abre las tablas. Le pide datos con una consulta de SQL y recibe filas.
Ya sabes SQL, y aquí es igual. Prueba esta consulta.
Pruébalo: los goleadores
-- Los jugadores con 5 goles o más, del que más marcó al que menos.
SELECT name, goals FROM player WHERE goals >= 5 ORDER BY goals DESC;
-- Cambia el 5 por un 8 y ejecuta otra vez.
Conectar con PDO
Para conectar creas un objeto PDO. Le das el DSN, el usuario y la clave.
Con ERRMODE_EXCEPTION PHP avisa de cualquier fallo. Con FETCH_ASSOC cada fila llega como un array con nombre.
Si no puede conectar, atrapas el error. Al visitante le das una frase amable.
Conectar con la base de datos
<?php
$dsn = "mysql:host=localhost;dbname=league;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, "league_user", "una-clave-larga", $options);
} catch (PDOException $e) {
// Al visitante, una frase amable. Los detalles, solo al registro.
error_log($e->getMessage());
exit("No podemos conectar ahora. Inténtalo más tarde.");
}
Repaso rápido: conectar
Inténtalo
Repaso rápido: conectar
3 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.
Leer filas
Con la conexión abierta, query envía la consulta. Después fetchAll trae todas las filas.
Obtienes un array. Cada elemento es una fila, y cada fila es otro array con los nombres de las columnas.
Para escribirlas, recorres el array con foreach.