PHP PDO 无法获取 OUT 参数值

Posted

技术标签:

【中文标题】PHP PDO 无法获取 OUT 参数值【英文标题】:PHP PDO cannot get OUT parameter value 【发布时间】:2011-09-19 07:19:21 【问题描述】:

我刚开始将 php PDO 与 mysql 存储过程一起使用,但在如何从过程调用中获取 OUT 参数时遇到了问题。我查看了许多类似的 *** 主题,但不幸的是我找不到解决问题的方法:|

详情如下:

过程接受1个输入参数和2个强制输出参数,并在其中返回结果状态。

我是这样称呼它的:

$input = 5;
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass");
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)");
$proc->execute();

该过程在@o_code 参数中返回INT,在@o_message 参数中返回STRING。 如果它是从 CLI 调用的,并且在调用之后我在 CLI 中编写

select @o_code, @o_message;

一切正常,即我能够看到这些 OUT 参数中返回的值。 但是我不能从 PHP 代码中做到这一点——由于某种原因,我总是得到 FALSE 结果。该程序正确地完成了它的工作,但我无法得到它的结果。

在进行上述调用后,我尝试了以下方法来获取值:

$output = $proc->fetch(PDO::FETCH_ASSOC); // also with PDO:FETCH_OBJ
$output = $mydb->query("select @o_code, @o_message");
$output = $mydb->query("select @o_code, @o_message")->fetch();
$output = $mydb->query("select @o_code, @o_message")->fetchColumn(); 
$output = $mydb->query("select @o_code, @o_message")->fetchAll();

但是这些都不会返回任何不同于 NULL 或 FALSE 的结果。我也尝试过使用 bindParam,但仍然无法正常工作。

感谢您在此问题上提供的任何帮助,祝您今天愉快!

----- 编辑-----

这是我尝试使用 bindParam 的代码,但仍然无法正常工作:

$input = 5;
$proc = $mydb->prepare("CALL proc_name(?, ?, ?)");
$proc->bindParam(1, $input, PDO::PARAM_INT); 
$proc->bindParam(2, $code, PDO::PARAM_INT); 
$proc->bindParam(3, $message, PDO::PARAM_STR);
$proc->execute();

var_dump($code, $message); // NULL, NULL

【问题讨论】:

找到它:***.com/a/32224294/2717254 您指向的问题是另一个问题,它不能解决此处发布的问题的问题。您可以检查下面接受的答案,看看问题是应该调用“closeCursor()”以使事情正常工作。您在另一个问题中的答案确实有那行代码,所以我的猜测是它也不起作用。 答案是关于获取输出参数值!不涉及 closeCursor() 调用。我更新了答案以更好地澄清 btw 【参考方案1】:

问题是调用存储过程的第一个查询不被认为已完成并关闭,PDO 不会执行另一个查询,直到前一个查询完成。

解决方案是添加$proc->closeCursor();

整个工作样本是:

$input = 5;
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass");
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)");
$proc->execute();
$proc->closeCursor();

$output = $mydb->query("select @o_code, @o_message")->fetch(PDO::FETCH_ASSOC);
var_dump($output); // array('@o_code'=>value, 'o_message'=>value)

【讨论】:

以上是关于PHP PDO 无法获取 OUT 参数值的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 调用带有 Out 参数的存储过程

PHP / PDO动态绑定值(无效的参数计数错误)

PHP PDO / 从 MySQL 存储过程中检索 OUT 参数

php pdo & iSeriesAccess ODBC - 使用 OUT 参数调用存储过程不起作用

DB2 选择设置参数,然后用参数值插入

从 C++ 中 WMI 中的 OUT 参数获取值