我使用 mysqli
从 PHP 调用了一个 MySQL 存储过程。这有一个输出参数。
$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 Fatal error: Cannot use object of type stdClass as array
最佳答案
或者甚至只是执行 "SELECT @id AS id"
然后 $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();
或者将选择添加到 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 堆栈。
关于PHP - MySQL 从存储过程中获取 out 参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693234/