微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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栈.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐