Mysql
 sql >> Database >  >> RDS >> Mysql

PHP - MySQL ottiene il valore del parametro out da una procedura memorizzata

O anche semplicemente fare un "SELECT @id AS id" quindi $row->id funzionerà bene. Rinomino sempre le colonne selezionate per mantenere il nome significativo quando necessario :-)

A proposito, puoi semplicemente concatenare la chiamata e selezionare @... (con un delimitatore di istruzione;) e RS sarà il valore restituito. Sfortunatamente questo restituisce un set di risultati multiplo ed è necessario svuotare il set completo altrimenti le query successive si bloccheranno. Vedi i seguenti esempi:

$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();

In alternativa, aggiungi select in addNewUser e restituisci un RS invece di 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

Il primo restituisce un set multiquery (NULL, RS) e il secondo un set (RS, NULL), quindi puoi usare una semplice chiamata a query() che incorpora il primo fetch_object(), ma devi comunque svuotare lo stack RS.