gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:46:27 24 4
gpt4 key购买 nike

我使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com