gpt4 book ai didi

PHP PDO 无法获取 OUT 参数值

转载 作者:可可西里 更新时间:2023-11-01 14:05:40 24 4
gpt4 key购买 nike

我刚开始将 PHP PDO 与 MySQL 存储过程一起使用,我对如何从过程调用中获取 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 代码中做到这一点——出于某种原因,我总是得到错误的结果。该程序正确地完成了它的工作,但我就是无法得到它的结果。

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

$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)

关于PHP PDO 无法获取 OUT 参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422030/

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