Problème :
Comment puis-je récupérer la valeur LAST_INSERT_ID() à partir d'une procédure stockée MySQL utilisant PHP et AOP ?
Procédure :
Considérez le code PHP suivant :
<?php $stmt = $db->prepare("CALL simpleProcedure(:name,:returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':returnid', $returnid, PDO::PARAM_INT, 11); $stmt->execute(); echo $returnid; ?>
Bien que ce code puisse sembler correct, il ne fonctionne pas en raison de un bug de longue date dans PDO.
Solution :
Pour récupérer le résultat d'une procédure MySQL, suivez ces étapes :
Étape 1 : Exécuter la procédure
Exécutez la procédure avec vos entrées et spécifiez quelles variables MySQL stockeront les résultats. Par exemple :
<?php $stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->execute(); ?>
Étape 2 : interroger les variables MySQL
Exécutez une requête distincte pour sélectionner les variables MySQL :
<?php $stmt = $db->query("SELECT @returnid"); $result = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); $returnid = $result[0]; ?>
Exemple :
Le code suivant inclut un exemple plus détaillé montrant l'utilisation de variables pour différents types de paramètres (IN, INOUT, OUT) :
Procédure SQL :
CREATE PROCEDURE `demoSpInOutSqlVars`( IN pInput_Param INT, /* --- */ INOUT pInOut_Param INT, OUT pOut_Param INT) BEGIN /* * Pass the full names of SQL User Variable for these parameters. e.g. '@varInOutParam' * These 'SQL user variables names' are the variables that Mysql will use for: * 1) finding values * 2) storing results * * It is similar to 'variable variables' in PHP. */ SET pInOut_Param := ABS(pInput_Param) + ABS(pInOut_Param); SET pOut_Param := ABS(pInput_Param) * -3; END$$
Code PHP :
<?php // Bind PHP variables $phpInParam = 5; $phpInOutParam = 404; $phpOutParam = null; // Prepare the SQL procedure call $sql = "call demoSpInOut(:phpInParam, @varInOutParam, @varOutParam)"; $stmt = $db->prepare($sql); $stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT); // Set the SQL User INOUT variables $db->exec("SET @varInOutParam = $phpInOutParam"); // Execute the procedure $stmt->execute(); // Get the SQL variables into PHP variables $sql = "SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual"; $results = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC); $phpInOutParam = $results[0]['phpInOutParam']; $phpOutParam = $results[0]['phpOutParam']; // Display the PHP variables echo "phpInParam: $phpInParam<br>"; echo "phpInOutParam: $phpInOutParam<br>"; echo "phpOutParam: $phpOutParam<br>"; ?>
En suivant ces étapes, vous pouvez récupérer efficacement le résultat des procédures stockées MySQL à 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!