Maison > Article > base de données > Comment récupérer LAST_INSERT_ID() de la procédure stockée MySQL à l'aide de PHP PDO ?
Récupérer LAST_INSERT_ID() d'une procédure stockée MySQL à l'aide de PHP PDO
Récupérer la valeur LAST_INSERT_ID() d'une procédure stockée MySQL dans PHP PDO peut être une tâche déroutante. Malgré une documentation abondante, cela reste une source courante de défis pour les développeurs. Examinons une solution à ce problème.
Le principal problème réside dans le fait que MySQL utilise des variables pour les paramètres IN, INOUT et OUT dans les procédures stockées. Pour obtenir le LAST_INSERT_ID(), un processus en deux étapes est requis :
Étape 1 : Exécuter la procédure stockée avec des variables
$stmt = $db->prepare("CALL simpleProcedure(:name, :returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindValue(':returnid', $returnid, PDO::PARAM_INT, 11); $stmt->execute();
Cette étape exécute la procédure stockée procédure, en passant les valeurs d'entrée ainsi qu'en déclarant les variables pour recevoir la valeur LAST_INSERT_ID(). Cependant, nous ne pouvons pas accéder directement à la valeur des variables PHP.
Étape 2 : Récupérer les valeurs des variables
Pour obtenir le LAST_INSERT_ID(), nous devons exécuter une requête distincte pour récupérer les valeurs attribuées aux variables SQL. Cela implique de définir les variables utilisateur SQL et d'exécuter une requête pour sélectionner leurs valeurs.
$sql = "SELECT @returnid AS last_insert_id"; $result = $db->query($sql)->fetch(); $last_insert_id = $result['last_insert_id'];
En suivant ces étapes, vous pouvez récupérer avec succès la valeur LAST_INSERT_ID() à partir d'une procédure stockée MySQL à l'aide de PHP PDO. Il est important de noter que lier des variables PHP aux paramètres INOUT ou OUT peut entraîner des erreurs. Utilisez plutôt les variables utilisateur SQL pour gérer les paramètres de variable.
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!