Les requêtes préparées avec PDO (PHP Data Objects) sont une pratique essentielle pour sécuriser les interactions avec une base de données en PHP. Elles permettent d’éviter les injections SQL et d’assurer une meilleure efficacité dans l’exécution des requêtes. Voici une explication détaillée sur la manière de les utiliser, avec des exemples concrets et les sources qui soutiennent les informations fournies.
1. Créer une connexion PDO : Pour utiliser PDO, il faut d’abord établir une connexion à la base de données. Cela se fait généralement en instanciant un objet de la classe `PDO`, en fournissant le DSN (Data Source Name), le nom d’utilisateur, et le mot de passe.
\`\`\`php $dsn = ‘mysql:host=localhost;dbname=testdb’; $username = ‘root’; $password = ‘’; try { $pdo = new PDO; $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo ‘Connection failed: ‘ . $e->getMessage(); } \`\`\` Source : [PHP: PDO – Manual](https://www.php.net/manual/en/book.pdo.php)1. Préparer une requête : Une fois la connexion établie, vous pouvez préparer une requête. La méthode `prepare` de l’objet PDO est utilisée pour cela. Vous écrivez alors une requête avec des marqueurs de paramètres (ex. `:id`, `:name`).
\`\`\`php $sql = ‘SELECT \* FROM users WHERE id = :id’; $stmt = $pdo->prepare($sql); \`\`\` Exemple : \`\`\`php $sql = ‘SELECT \* FROM users WHERE email = :email’; $stmt = $pdo->prepare($sql); \`\`\` Source : [PHP: PDOStatement::prepare – Manual](https://www.php.net/manual/en/pdostatement.prepare.php)1. Lier les paramètres : Les paramètres de la requête préparée doivent être liés à des valeurs particulières. Ceci peut se faire en utilisant la méthode `bindParam` ou `bindValue`. La différence principale est que `bindValue` lie une valeur directement, tandis que `bindParam` lie une variable qui peut être modifiée ultérieurement.
\`\`\`php $id = 1; $stmt->bindParam(‘:id’, $id); \`\`\` Exemple avec `bindValue` : \`\`\`php $email = ‘test@example.com’; $stmt->bindValue(‘:email’, $email, PDO::PARAM\_STR); \`\`\` Source : [PHP: PDOStatement::bindParam – Manual](https://www.php.net/manual/en/pdostatement.bindparam.php)1. Exécuter la requête : Une fois les paramètres liés, vous exécutez la requête préparée avec la méthode `execute`.
\`\`\`php $stmt->execute(); \`\`\` Exemple : \`\`\`php $parameters = [‘email’ => ‘test@example.com’]; $stmt->execute($parameters); \`\`\` Source : [PHP: PDOStatement::execute – Manual](https://www.php.net/manual/en/pdostatement.execute.php)1. Récupérer les résultats : Après avoir exécuté la requête, vous pouvez récupérer les résultats en utilisant des méthodes comme `fetch` pour une seule ligne ou `fetchAll` pour toutes les lignes.
\`\`\`php $user = $stmt->fetch(PDO::FETCH\_ASSOC); \`\`\` Exemple : \`\`\`php $users = $stmt->fetchAll(PDO::FETCH\_ASSOC); foreach ($users as $user) { echo $user[‘name’] . “
Sources:
- [PHP: PDO – Manual](https://www.php.net/manual/en/book.pdo.php)
- [PHP: PDOStatement::prepare – Manual](https://www.php.net/manual/en/pdostatement.prepare.php)
- [PHP: PDOStatement::bindParam – Manual](https://www.php.net/manual/en/pdostatement.bindparam.php)
- [PHP: PDOStatement::execute – Manual](https://www.php.net/manual/en/pdostatement.execute.php)
- [PHP: PDOStatement::fetch – Manual](https://www.php.net/manual/en/pdostatement.fetch.php)