Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP - MySQL obtém valor do parâmetro out de um procedimento armazenado


Ou até mesmo faça um "SELECT @id AS id" então $row->id funcionará bem. Eu sempre renomeio colunas selecionadas para manter o nome significativo quando necessário :-)

BTW, você pode simplesmente concatenar a chamada e selecionar @... (com um delimitador de instrução;) e o RS será o valor retornado. Infelizmente, isso retorna um mutli-resultset e você precisa liberar o conjunto completo, caso contrário, as consultas subsequentes serão interrompidas. Veja os seguintes exemplos:
$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, adicione o select no addNewUser e retorne um RS em vez 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

O primeiro retorna um conjunto multiquery (NULL, RS) e o segundo um conjunto (RS, NULL), portanto, você pode usar uma chamada query() simples que incorpora o primeiro fetch_object(), mas ainda precisa liberar a pilha RS.