PHP PDO(MSSQL)无法获取OUPUT参数 [英] PHP PDO (MSSQL) can not get OUPUT parameters

查看:89
本文介绍了PHP PDO(MSSQL)无法获取OUPUT参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用bindParam(PHP PDO)获得输出. PHP PDO库是FreeTDS for MS SQL驱动程序.无论我做什么,我似乎都无法获得php.net上所建议的绑定参数中的输出".我已经证实可以调用EXEC并返回结果集(使用选择),但是OUTPUT参数永远不会改变.

I'm trying to get OUTPUT using bindParam (PHP PDO). The PHP PDO library is the FreeTDS for MS SQL driver. Whatever I do, I can't seem to get the "OUTPUT" in the the bound params as suggested on php.net. I've verified I can call the EXEC and return a result set (using a select), but the OUTPUT parameters never change.

PHP代码. $ this-> db是一个PDO对象

PHP Code. $this->db is a PDO object

$stmt = $this->db->prepare("EXEC ".$this->db_schema."[".$this->procedure."] :error_num, :error_msg");
$error_num = 0;
$error_msg = '';
$stmt->bindParam(':error_num', $error_num, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(':error_msg', $error_msg, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 2000);
$stmt->execute();
var_dump($stmt);
echo "\nerror_num: $error_num";
echo "\nerror_msg: $error_msg\n\n";

测试输出的存储过程

USE [NGCustom]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [web].[addTest] (
    @error_num int OUTPUT,
    @error_msg VARCHAR(MAX) OUTPUT
)

AS

BEGIN 
SET @error_num = 99
SET @error_msg = 'Error! Oh my gosh!'
END
GO

PHP的输出:

object(PDOStatement)#77 (1) {
  ["queryString"]=>
  string(54) "EXEC [NGCustom].[web].[addTest] :error_num, :error_msg"
}

error_num: 0
error_msg: 

推荐答案

AFAIK,FreeTDS驱动程序不支持OUTPUT参数.我从我的团队进行评估时就记得这一点.

AFAIK, the FreeTDS driver does not support OUTPUT parameters. I remember this from when my team was doing our assessment.

这就是为什么它不起作用的原因: http://www.freetds.org/faq.html#ms.output.parameters

Here's why it doesn't work: http://www.freetds.org/faq.html#ms.output.parameters

这是来自pyodbc的参考(也可以在FreeTDS上运行),因此同样适用:

Here's a reference from pyodbc (which also runs on FreeTDS), so the same applies: https://code.google.com/p/pyodbc/wiki/StoredProcedures

引用:结果:由于此时我们无法使用输出参数,因此您需要在结果集中返回结果.通常,这意味着仅使用SELECT语句结束存储过程."

To quote: "Results: Since we can't use output parameters at this point, you'll need to return results in a result set. Usually this means just ending your stored procedure with a SELECT statement."

您需要改用SELECT.

You'll need to use a SELECT instead.

这篇关于PHP PDO(MSSQL)无法获取OUPUT参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆