我刚开始使用PHP PDO和MySQL存储过程,并且我在如何从过程调用中获取OUT参数时遇到了问题。我看了很多类似的stackoverflow主题,但不幸的是我找不到解决我的问题的方法:|PHP PDO无法获得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_message参数@o_code参数和返回STRING INT。 如果它是从CLI调用,调用后我在CLI
select @o_code, @o_message;
万事OK写的,这是我能看到这些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
发现:http://stackoverflow.com/a/32224294/2717254 –
,你指向的问题是一个不同的问题,它不能解决这里发布的问题的问题。你可以在下面检查接受的答案,看看是否应该调用“closeCursor()”函数来正常工作。在另一个问题中你的答案确实有这样的代码行,所以我的猜测是它也不起作用。 – middlehut
答案是关于获取输出参数值!不涉及closeCursor()调用。我更新了答案,以澄清更好的顺便说一句 –