php - PDO 存储过程返回值

标签 php sql-server stored-procedures pdo

我正在使用一个返回错误代码的 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/

相关文章:

php - 从php中的存储过程中获取值

c# - 如果在 proc 中使用 IF/ELSE,MySQL 存储过程不会将数据返回到 C# 应用程序?

php - 在 Laravel 4 中声明新位置和新命名空间的位置

php - 仅使用 Wordpress 中的库在 PHP 中读取 JSON

php - laravel cookie 在发布数据后不起作用

sql - MSSQLSM 2008 奇怪的登录在 select 语句上失败

c# - Entity Framework 中的多重连接

sql - 用于加密数据的存储过程

php - 使用复选框从数据库中提取电子邮件地址(PHP、MYSQL)

sql - SQL Server 中的 Trunc(sysdate)