存储过程-PHP PDO无法获取OUT参数值



我刚开始在MySQL存储过程中使用PHP PDO,并且我对如何从过程调用中获取OUT参数有问题。我研究了许多类似的stackoverflow主题,但不幸的是,我找不到解决问题的方法:|

以下是详细信息:

该过程采用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

问题是,调用存储过程的第一个查询没有被视为已完成和已关闭,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)

最新更新