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

Mòdul 2: Estructures de Control

Mòdul 3: Funcions

Mòdul 4: Arrays

Mòdul 5: Treballant amb Formularis

Mòdul 6: Treballant amb Fitxers

Mòdul 7: Programació Orientada a Objectes (OOP)

Mòdul 8: Treballant amb Bases de Dades

Mòdul 9: Tècniques Avançades de PHP

Mòdul 10: Frameworks PHP i Millors Pràctiques

Mòdul 11: Projecte: Construint una Aplicació Web

© Copyright 2024. Tots els drets reservats