sql >> Base de Datos >  >> RDS >> Mysql

PHP:MySQL obtiene el valor del parámetro de salida de un procedimiento almacenado

O simplemente haga un "SELECT @id AS id" entonces $row->id funcionará bien. Siempre cambio el nombre de las columnas seleccionadas para mantener el nombre significativo cuando sea necesario :-)

Por cierto, simplemente puede concatenar la llamada y seleccionar @... (con un delimitador de instrucción;) y el RS será el valor devuelto. Desafortunadamente, esto devuelve un conjunto de resultados múltiples y debe vaciar el conjunto completo; de lo contrario, las consultas posteriores se detendrán. Vea los siguientes ejemplos:

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

Alternativamente, agregue la selección en addNewUser y devuelva un RS en lugar de un parámetro

$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

El primero devuelve un conjunto de consultas múltiples (NULL, RS) y el segundo un conjunto (RS, NULL), por lo tanto, puede usar una llamada simple query() que incrusta el primer fetch_object(), pero aún necesita vaciar la pila RS.