Transactions et validation automatique (auto-commit)
<<<
Requêtes préparées et procédures stockées Erreurs et gestionnaire des erreurs
>>>

8.101 Fonctions PDO
8 Référence des fonctions
 Manuel PHP

Introduction
Installation
Configuration à l'exécution
Drivers PDO
Connexions et gestionnaire de connexion
Transactions et validation automatique (auto-commit)
->Requêtes préparées et procédures stockées
Erreurs et gestionnaire des erreurs
Les objets larges (LOBs)
Classes pré-définies
Constantes pré-définies
PDO::beginTransaction
PDO::commit
PDO::__construct
PDO::errorCode
PDO::errorInfo
PDO::exec
PDO::getAttribute
PDO::getAvailableDrivers
PDO::lastInsertId
PDO::prepare
PDO::query
PDO::quote
PDO::rollBack
PDO::setAttribute
PDOStatement::bindColumn
PDOStatement::bindParam
PDOStatement::bindValue
PDOStatement::closeCursor
PDOStatement::columnCount
PDOStatement::errorCode
PDOStatement::errorInfo
PDOStatement::execute
PDOStatement::fetch
PDOStatement::fetchAll
PDOStatement::fetchColumn
PDOStatement::getAttribute
PDOStatement::getColumnMeta
PDOStatement::nextRowset
PDOStatement::rowCount
PDOStatement::setAttribute
PDOStatement::setFetchMode

8.101.7 Requêtes préparées et procédures stockées

La plupart des bases de données supporte le concepte des requêtes préparées. Qu'est-ce donc ? Vous pouvez les voir comme une sorte de template compilée pour le SQL que vous voulez exécuter, qui peut être personnalisé en utilisant des variables en guise de paramètres. Les requêtes préparées offrent deux fonctionnalités essentielles :

  • La requête ne doit être analysée (ou préparée) qu'une seule fois, mais peut être exécutée plusieurs fois avec des paramètres identiques ou différents. Lorsque la requête est préparée, la base de données va analyser, compiler et optimiser son plan pour exécuter la requête. Pour les requêtes complexes, ce processus peut prendre assez de temps, ce qui peut ralentir vos applications si vous devez répéter la même requête plusieurs fois avec différents paramètres. En utilisant les requêtes préparées, vous évitez ainsi de répéter le cycle analyser/compilation/optimisation. Pour résumé, les requêtes préparées utilisent moins de ressource et s'exécutent plus rapidement.
  • Les paramètres pour préparer les requêtes n'ont pas besoin d'être entre guillemets ; le driver le gère pour vous. Si votre application utilise exclusivement les requêtes préparées, vous pouvez être sûr qu'aucune injection SQL n'est possible (Cependant, si vous construisez d'autres parties de la requête en vous basant sur des entrées utilisateurs, vous continuez à prendre un risque).

Les requêtes préparées sont tellement pratiques que c'est l'unique fonctionnalité que PDO émule pour les drivers qui ne les supportent pas. Ceci assure de pouvoir utiliser la même technique pour accéder aux données, sans se soucier des capacités de la base de données.

Insertions répétitives en utilisant les requêtes préparées

Cet exemple effectue une requête INSERT en y substituant un nom et une valeur pour les marqueurs nommés.

Insertions répétées en utilisant des requêtes réparées

Cet exemple effectue une requête INSERT en y substituant un nom et une valeur pour les marqueurs ? .

Récupération des données en utilisant des requêtes préparées

Cet exemple récupère des données basées sur la valeur d'une clé fournie par un formulaire. L'entrée utilisateur est automatiquement échappée, il n'y a donc aucun risque d'attaque par injection SQL.

Si le driver de la base de données le supporte, vous pouvez également lier des paramètres aussi bien pour l'entrée que pour la sortie. Les paramètres de sortie sont utilisés typiquement pour récupérer les valeurs d'une procédure stockée. Les paramètres de sortie sont un peu plus complexe à utiliser que les paramètres d'entrée car vous devez savoir la longueur d'un paramètre donné pourra atteindre lorsque vous le liez. Si la valeur retournée est plus longue que la taille qui vous auriez suggéré, une erreur sera émise.

Appel d'une procédure stockée avec un paramètre de sortie

<?php
$stmt
= $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);

// Appel de la procédure stockée
$stmt->execute();

print
"La procédure a retourné : $return_value\n";
?>

Vous devez également spécifier les paramètres qui gèrent les valeurs aussi bien pour l'entrée que pour la sortie ; la synthaxe est similaire aux paramètres de sortie. Dans le prochain exemple, la chaîne 'Bonjour' est passée à la procédure stockée et lorsqu'elle retourne la valeur, 'Bonjour' est remplacé par la valeur retournée par la procédure.

Appel d'une procédure stockée avec un paramètre d'entrée/sortie

<?php
$stmt
= $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000);

// appel de la procédure stockée
$stmt->execute();

print
"La procédure a retourné : $value\n";
?>

<< Requêtes préparées et procédures stockées >>
Transactions et validation automatique (auto-commit) Fonctions PDO Erreurs et gestionnaire des erreurs