我正在使用一个返回错误代码的 SQL Server 存储过程;这是 SP 的一个非常简单的片段。
DECLARE @ret int
BEGIN
SET @ret = 1
RETURN @ret
END
我可以使用 mssql 扩展获取返回值:
mssql_bind($proc, "RETVAL", &$return, SQLINT2);
但是,我不知道如何访问 PDO 中的返回值;我不想使用 OUT 参数,因为已经编写了很多这些存储过程。这是我目前如何在 PHP 中调用过程的示例。
$stmt = $this->db->prepare("EXECUTE usp_myproc ?, ?");
$stmt->bindParam(1, 'mystr', PDO::PARAM_STR);
$stmt->bindParam(2, 'mystr2', PDO::PARAM_STR);
$rs = $stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
最佳答案
Check out MSDN for info on how to correctly bind to this type of call
您的 PHP 代码可能应该调整为看起来更像这样。这可能仅在您通过 ODBC 调用时有效,老实说,这是对 SQL Server 执行任何操作的首选方式;在 Windows 系统上使用 SQL Native Client,在 *nix 系统上使用 FreeTDS ODBC 驱动程序:
<?php
$stmt = $this->db->prepare("{?= CALL usp_myproc}");
$stmt->bindParam(1, $retval, PDO::PARAM_STR, 32);
$rs = $stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "The return value is $retval\n";
?>
这里的关键是返回值可以绑定(bind)为 OUT 参数,而无需重构存储过程。
关于php - PDO 存储过程返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984786/