我使用 PHP 从 PHP 调用了 MySQL 存储过程mysqli
。它有一个输出参数。
$rs = $mysqli->query("CALL addNewUser($name,$age,@id)");
这里,@id 是输出参数。接下来,我触发以下查询来获取 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 致命错误:无法将 stdClass 类型的对象用作数组
或者甚至只是做一个"SELECT @id AS id"
then $row->id
会工作得很好。我总是重命名选择的列,以在必要时保持名称有意义:-)
顺便说一句,您可以简单地连接调用并选择 @...(使用 ; 语句分隔符),RS 将是返回值。不幸的是,这会返回一个多结果集,您需要刷新完整的结果集,否则后续查询将停止。请参阅以下示例:
$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 参数
$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) 集,因此您可以使用嵌入第一个 fetch_object() 的简单 query() 调用,但您仍然需要刷新 RS 堆栈。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)