PHP - MySQL obtient la valeur de paramètre de sortie à partir d'une procédure stockée
J'ai appelé un MySQL procédure stockée à partir de PHP à l'aide de mysqli
. Cela a un paramètre de sortie.
$rs = $mysqli->query("CALL addNewUser($name,$age,@id)");
Ici, @id est le paramètre de sortie. Ensuite, je lance la requête suivante pour obtenir la valeur du paramètre de sortie:
$rs2 = $mysqli->query("SELECT @id");
while($row = $rs->fetch_object()){
echo var_dump($row);
}
La sortie de var_dump
est comme suit.
object(stdClass)#5 (1) { ["@id"]=> string(6) "100026" }
Donc, maintenant, je veux récupérer la valeur de @id
, qui j'en suis incapable. J'ai essayé $row[0]->{@id}
mais cela a donné d'erreur suivant:
PHP Fatal error: Cannot use object of type stdClass en tant que tableau
OriginalL'auteur mtk | 2012-07-27
Vous devez vous connecter pour publier un commentaire.
Ou même juste faire un
"SELECT @id AS id"
puis$row->id
fonctionnera très bien. J'ai toujours renommer sélectionner les colonnes à garder le nom significatif si nécessaire 🙂BTW, vous pouvez simplement concaténer l'appel et sélectionnez @... (avec un ; déclaration délimiteur) et de la RS sera la valeur retournée. Malheureusement, cela renvoie une mutli-jeu de résultats et vous devez rincer l'ensemble sinon le les requêtes suivantes décrochage. Voir les exemples suivants:
Sinon ajouter le sélectionner dans la addNewUser et le retour d'un RS au lieu de param
La première renvoie une multiquery (NULL, RS) de fixer et de la seconde (RS, NULL), donc vous pouvez utiliser une requête simple() appels qui intègre la première fetch_object(), mais vous avez encore le besoin de rincer la RS de la pile.
Désolé, je doit vérifier BTWs contre mon code 🙁 j'ai utilisé la deuxième version.
Hey, merci beaucoup pour l'explication. Tous les exemples fonctionnent bien. Cherchais juste une solution, mais il a obtenu trois 🙂
OriginalL'auteur TerryE
Juste
$row->{"@id"}
pourrait fonctionner ici. Vous ne pouvez pas utiliser unstdClass
comme un tableau ($row[0]...
).@id
devient'id'
(sauf si vous avez défini une constante nomméeid
).Corrigés.
[email protected]
OriginalL'auteur Madara Uchiha
Une autre bonne méthode, sa fonctionne bien: Cheers!!
OriginalL'auteur Prabakar Sebastin
Alternativement, vous pouvez simplement aller chercher les données dans un tableau à l'aide de
mysqli::fetch_assoc()
et d'accéder aux données à l'aide de$row['@id']
.OriginalL'auteur Palladium
Ici est la solution de travail:
OriginalL'auteur SATYAJEET RANJAN