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

标签 php mysql out-parameters

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

相关文章:

php - Libreoffice --headless 拒绝转换,除非 root,无法从 PHP 脚本运行

mysql - 如何在 MySQL 中选择与交叉链接表中的一组 id 匹配的表中的所有元素

mysql - 使用 mySQL 中的其他表更新值

mysql - OUT 参数对某些用户不起作用

php - Mysql搜索多行,多表多关键字

javascript中的php变量问题

javascript - 在 for 循环中将 2 个输入字段的值与第 3 个输入字段相乘

java - ibatis in/out参数问题

c# - 调用不带参数的方法的 IL 代码

php - mysqli 获取数组返回 null 作为结果