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 :
Préparer la déclaration PDO :
$stmt = $db->prepare("CALL proc_OUT(?)");
Lier le paramètre OUT :
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000);
Exécuter la procédure stockée :
$stmt->execute();
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!