Maison >base de données >tutoriel mysql >Comment récupérer la sortie de procédures stockées avec des paramètres OUT à l'aide de PDO ?

Comment récupérer la sortie de procédures stockées avec des paramètres OUT à l'aide de PDO ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-07 08:12:02888parcourir

How to Retrieve Output from Stored Procedures with OUT Parameters Using PDO?

Appel de procédures stockées avec des paramètres OUT à l'aide de PDO

Dans la programmation de bases de données, les procédures stockées sont essentielles pour encapsuler des opérations de bases de données complexes. Récupérer le résultat des procédures stockées à l'aide de PDO peut être difficile.

Problème :
Lors de l'appel d'une procédure stockée avec un paramètre OUT à l'aide de PDO, vous pouvez rencontrer une erreur du type :

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger

Solution :
PDO s'attend à ce que les paramètres OUT soient récupérés à l'aide d'une requête distincte. Les étapes suivantes décrivent l'approche correcte :

  1. Préparer la déclaration PDO :

    $stmt = $db->prepare("CALL proc_OUT(?)");
  2. Lier le paramètre OUT :

    $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
  3. Exécuter la procédure stockée :

    $stmt->execute();
  4. Interroger le paramètre OUT :

    $stmt2 = $db->query("SELECT @return_value");
    $row = $stmt2->fetch(PDO::FETCH_NUM);
    $return_value = $row[0];

Exemple :
Voici un exemple d'appel d'une procédure stockée avec un paramètre OUT :

$db = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");

// Stored procedure definition
$sql = "CREATE PROCEDURE proc_OUT (OUT var1 VARCHAR(100))
BEGIN
    SET var1 = 'This is a test';
END";
$db->query($sql);

// Call the stored procedure
$stmt = $db->prepare("CALL proc_OUT(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
$stmt->execute();

// Query the OUT parameter
$stmt2 = $db->query("SELECT @return_value");
$row = $stmt2->fetch(PDO::FETCH_NUM);
$return_value = $row[0];

echo $return_value; // Output: 'This is a test'

En suivant cette approche, vous pouvez appeler avec succès des procédures stockées avec des paramètres OUT à l'aide de PDO.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn