PHP – MySQL从存储过程中获取out参数的值

我使用mysqli从PHP调用一个MysqL存储过程.这有一个输出参数.

$rs = $MysqLi->query("CALL addNewUser($name,$age,@id)");

这里,@ id是out参数.接下来,我触发以下查询获取out参数的值:

$rs2 = $MysqLi->query("SELECT @id");
while($row = $rs->fetch_object()){
    echo var_dump($row);
}

var_dump的输出如下.

object(stdClass)#5 (1) { ["@id"]=> string(6) "100026" }

所以,现在我想检索@id的值,我无法找到它.我尝试了$row [0] – > {@ id},但这给出了以下错误

PHP Fatal error: Cannot use object of type stdClass as array

解决方法:

或者甚至只做一个“SELECT @id AS id”然后$row-> id就可以了.我总是重命名选择列以在必要时保持名称有意义:-)

顺便说一下,您可以简单地连接调用并选择@ …(带有;语句分隔符),RS将是返回值.不幸的是,这会返回一个mutli-resultset,你需要刷新整个set,否则后续查询将停止.请参阅以下示例:

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

或者将select添加到addNewUser并返回RS而不是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

一个返回一个查询(NULL,RS)集和第二个(RS,NULL)集,因此你可以使用一个简单的query()调用嵌入第一个fetch_object(),但你仍然需要刷新RS栈.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...