Introducció
PDO (PHP Data Objects) és una extensió de PHP que proporciona una interfície consistent per accedir a bases de dades. PDO no només suporta MySQL, sinó també una varietat d'altres sistemes de bases de dades com PostgreSQL, SQLite, i més. En aquest tema, aprendrem com utilitzar PDO per connectar-nos a una base de dades, realitzar operacions CRUD (Crear, Llegir, Actualitzar, Esborrar) i gestionar errors de manera segura.
Continguts
Configuració de PDO
Abans de començar a utilitzar PDO, assegura't que l'extensió PDO estigui habilitada en la teva instal·lació de PHP. Normalment, PDO ve habilitat per defecte en la majoria de les instal·lacions de PHP modernes.
// Comprovar si PDO està habilitat if (defined('PDO::ATTR_DRIVER_NAME')) { echo "PDO està habilitat."; } else { echo "PDO no està habilitat."; }
Connexió a una Base de Dades
Per connectar-nos a una base de dades amb PDO, necessitem proporcionar una cadena de connexió (DSN), un nom d'usuari i una contrasenya. Aquí teniu un exemple de com connectar-se a una base de dades MySQL:
<?php $dsn = 'mysql:host=localhost;dbname=testdb'; $username = 'root'; $password = ''; try { $pdo = new PDO($dsn, $username, $password); // Establir el mode d'error de PDO a excepció $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connexió establerta correctament."; } catch (PDOException $e) { echo "Error de connexió: " . $e->getMessage(); } ?>
Explicació del Codi
- $dsn: La cadena de connexió que especifica el tipus de base de dades, l'host i el nom de la base de dades.
- $username: El nom d'usuari per a la connexió a la base de dades.
- $password: La contrasenya per a la connexió a la base de dades.
- PDO: La classe PDO que utilitzem per crear una nova connexió.
- setAttribute: Establim el mode d'error de PDO a excepció per gestionar errors de manera més eficient.
Operacions CRUD amb PDO
Crear (INSERT)
<?php $sql = "INSERT INTO usuaris (nom, email) VALUES (:nom, :email)"; $stmt = $pdo->prepare($sql); $nom = "Joan"; $email = "[email protected]"; $stmt->bindParam(':nom', $nom); $stmt->bindParam(':email', $email); if ($stmt->execute()) { echo "Nou registre creat correctament."; } else { echo "Error en crear el registre."; } ?>
Llegir (SELECT)
<?php $sql = "SELECT * FROM usuaris"; $stmt = $pdo->query($sql); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row['id'] . " - Nom: " . $row['nom'] . " - Email: " . $row['email'] . "<br>"; } ?>
Actualitzar (UPDATE)
<?php $sql = "UPDATE usuaris SET email = :email WHERE nom = :nom"; $stmt = $pdo->prepare($sql); $nom = "Joan"; $email = "[email protected]"; $stmt->bindParam(':nom', $nom); $stmt->bindParam(':email', $email); if ($stmt->execute()) { echo "Registre actualitzat correctament."; } else { echo "Error en actualitzar el registre."; } ?>
Esborrar (DELETE)
<?php $sql = "DELETE FROM usuaris WHERE nom = :nom"; $stmt = $pdo->prepare($sql); $nom = "Joan"; $stmt->bindParam(':nom', $nom); if ($stmt->execute()) { echo "Registre esborrat correctament."; } else { echo "Error en esborrar el registre."; } ?>
Gestió d'Errors amb PDO
PDO proporciona una manera eficient de gestionar errors mitjançant excepcions. Això ens permet capturar i gestionar errors de manera més controlada.
<?php try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Intentar executar una consulta $pdo->exec("INVALID SQL QUERY"); } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
Exercicis Pràctics
Exercici 1: Connexió a la Base de Dades
Crea un script PHP que es connecti a una base de dades MySQL anomenada escola
amb l'usuari admin
i la contrasenya admin123
. Mostra un missatge d'èxit o error segons el resultat de la connexió.
Exercici 2: Inserir Dades
Crea un formulari HTML que permeti als usuaris introduir el seu nom i email. Utilitza PDO per inserir aquestes dades en una taula anomenada alumnes
.
Exercici 3: Mostrar Dades
Utilitza PDO per recuperar i mostrar tots els registres de la taula alumnes
en una taula HTML.
Exercici 4: Actualitzar Dades
Crea un formulari que permeti als usuaris actualitzar el seu email. Utilitza PDO per actualitzar el registre corresponent a la taula alumnes
.
Exercici 5: Esborrar Dades
Crea un formulari que permeti als usuaris esborrar el seu registre de la taula alumnes
introduint el seu nom. Utilitza PDO per esborrar el registre corresponent.
Solucions als Exercicis
Solució 1: Connexió a la Base de Dades
<?php $dsn = 'mysql:host=localhost;dbname=escola'; $username = 'admin'; $password = 'admin123'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connexió establerta correctament."; } catch (PDOException $e) { echo "Error de connexió: " . $e->getMessage(); } ?>
Solució 2: Inserir Dades
<!-- formulari.html --> <form action="insert.php" method="post"> Nom: <input type="text" name="nom"><br> Email: <input type="text" name="email"><br> <input type="submit" value="Enviar"> </form> <!-- insert.php --> <?php $dsn = 'mysql:host=localhost;dbname=escola'; $username = 'admin'; $password = 'admin123'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO alumnes (nom, email) VALUES (:nom, :email)"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':nom', $_POST['nom']); $stmt->bindParam(':email', $_POST['email']); if ($stmt->execute()) { echo "Nou registre creat correctament."; } else { echo "Error en crear el registre."; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
Solució 3: Mostrar Dades
<?php $dsn = 'mysql:host=localhost;dbname=escola'; $username = 'admin'; $password = 'admin123'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM alumnes"; $stmt = $pdo->query($sql); echo "<table border='1'>"; echo "<tr><th>ID</th><th>Nom</th><th>Email</th></tr>"; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "<tr><td>" . $row['id'] . "</td><td>" . $row['nom'] . "</td><td>" . $row['email'] . "</td></tr>"; } echo "</table>"; } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
Solució 4: Actualitzar Dades
<!-- update_form.html --> <form action="update.php" method="post"> Nom: <input type="text" name="nom"><br> Nou Email: <input type="text" name="email"><br> <input type="submit" value="Actualitzar"> </form> <!-- update.php --> <?php $dsn = 'mysql:host=localhost;dbname=escola'; $username = 'admin'; $password = 'admin123'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "UPDATE alumnes SET email = :email WHERE nom = :nom"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':nom', $_POST['nom']); $stmt->bindParam(':email', $_POST['email']); if ($stmt->execute()) { echo "Registre actualitzat correctament."; } else { echo "Error en actualitzar el registre."; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
Solució 5: Esborrar Dades
<!-- delete_form.html --> <form action="delete.php" method="post"> Nom: <input type="text" name="nom"><br> <input type="submit" value="Esborrar"> </form> <!-- delete.php --> <?php $dsn = 'mysql:host=localhost;dbname=escola'; $username = 'admin'; $password = 'admin123'; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM alumnes WHERE nom = :nom"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':nom', $_POST['nom']); if ($stmt->execute()) { echo "Registre esborrat correctament."; } else { echo "Error en esborrar el registre."; } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
Conclusió
En aquest tema, hem après com utilitzar PDO per connectar-nos a una base de dades, realitzar operacions CRUD i gestionar errors de manera eficient. PDO és una eina poderosa i flexible que facilita la interacció amb bases de dades en PHP. Amb els exercicis pràctics, has tingut l'oportunitat de posar en pràctica els conceptes apresos i desenvolupar habilitats essencials per treballar amb bases de dades en PHP.
Curs de Programació PHP
Mòdul 1: Introducció a PHP
- Què és PHP?
- Configuració de l'Entorn de Desenvolupament
- El teu Primer Script PHP
- Sintaxi i Variables de PHP
- Tipus de Dades en PHP
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Àmbit de Variables
- Funcions Anònimes i Closures
Mòdul 4: Arrays
Mòdul 5: Treballant amb Formularis
Mòdul 6: Treballant amb Fitxers
- Lectura i Escriptura de Fitxers
- Funcions de Gestió de Fitxers
- Permisos de Fitxers
- Funcions de Directori
Mòdul 7: Programació Orientada a Objectes (OOP)
- Introducció a OOP
- Classes i Objectes
- Propietats i Mètodes
- Herència
- Interfícies i Classes Abstractes
- Traits
Mòdul 8: Treballant amb Bases de Dades
- Introducció a les Bases de Dades
- Connexió a una Base de Dades MySQL
- Realització d'Operacions CRUD
- Ús de PDO per a la Interacció amb Bases de Dades
- Seguretat en Bases de Dades
Mòdul 9: Tècniques Avançades de PHP
- Gestió d'Errors i Excepcions
- Sessions i Cookies
- Expressions Regulars
- Treballant amb JSON i XML
- PHP i Serveis Web
Mòdul 10: Frameworks PHP i Millors Pràctiques
- Introducció als Frameworks PHP
- Començant amb Laravel
- Arquitectura MVC
- Millors Pràctiques en Desenvolupament PHP
- Proves i Depuració