我使用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 举报,一经查实,本站将立刻删除。