Maison > base de données > tutoriel mysql > Comment récupérer la sortie des procédures stockées MySQL à l'aide de PDO en PHP ?

Comment récupérer la sortie des procédures stockées MySQL à l'aide de PDO en PHP ?

DDD
Libérer: 2024-11-08 05:03:02
original
388 Les gens l'ont consulté

How to Retrieve Output from MySQL Stored Procedures Using PDO in PHP?

Récupération des variables de procédure stockée MySQL en PHP à l'aide de PDO

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;
?>
Copier après la connexion

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();
?>
Copier après la connexion

É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];
?>
Copier après la connexion

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$$
Copier après la connexion

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>";
?>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal