Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP - MySQL obtient la valeur du paramètre out à partir d'une procédure stockée

Ou même simplement faire un "SELECT @id AS id" puis $row->id fonctionnera bien. Je renomme toujours les colonnes sélectionnées pour que le nom reste significatif si nécessaire :-)

BTW, vous pouvez simplement concaténer l'appel et sélectionner @... (avec un; délimiteur d'instruction) et le RS sera la valeur renvoyée. Malheureusement, cela renvoie un ensemble de résultats multiples et vous devez vider l'ensemble complet, sinon les requêtes suivantes se bloqueront. Voir les exemples suivants :

$db->multi_query( "CALL addNewUser($name,$age,@id);SELECT @id as id" );
$db->next_result();            // flush the null RS from the call
$rs=$db->store_result();       // get the RS containing the id
echo $rs->fetch_object()->id, "\n";
$rs->free();

Vous pouvez également ajouter le select dans addNewUser et renvoyer un RS au lieu de out param

$rs = $db->query( "CALL addNewUser($name,$age)" );
echo $rs->fetch_object()->id, "\n";
$rs->close();
$db->next_result();            // flush the null RS from the call

Le premier renvoie un ensemble multi-requêtes (NULL, RS) et le second un ensemble (RS, NULL). Vous pouvez donc utiliser un simple appel query() qui intègre le premier fetch_object(), mais vous devez toujours vider la pile RS.