【问题标题】:Executing a Stored Procedure with pdo_sqlsrv使用 pdo_sqlsrv 执行存储过程
【发布时间】:2012-04-16 11:16:24
【问题描述】:

我试图弄清楚如何在 sql server 2008 上使用 php5.3/pdo_sqlsrv 执行存储过程。

我找到了这段代码:

$sql = new PDO( "sqlsrv:server=$server;Database = $database", $user, $password);
$query = "{? = CALL sp_Login(?, ?)}"; 
$stmt = $sql->prepare( $query ); 
$returnVariable = 0;
$inputVariable1 = 'input1';
$inputVariable2 = 'input2';
$stmt->bindParam(1,$returnVariable,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,100);
$stmt->bindParam(2,$inputVariable1,PDO::PARAM_STR);
$stmt->bindParam(3,$inputVariable2,PDO::PARAM_STR);
$stmt->execute();
echo "Return value: ".$returnVariable;

存储过程有两个输入和一个输出参数,但它似乎什么也没返回,返回值仍然是0..

我可以运行选择/插入查询,所以它不是连接。

有没有关于 pdo_sqlsrv 存储过程的好文档?

谢谢!

【问题讨论】:

    标签: php stored-procedures pdo


    【解决方案1】:

    经过一天的搜索,我找到了一种调用 sp... 问题是存储过程正在运行插入查询,我不得不调用 nextRowset() 获取返回值

    http://social.msdn.microsoft.com/Forums/en/sqldriverforphp/thread/55f21fc5-dbc0-4fe4-a4ae-f15905a4293a

    $sql = new PDO( "sqlsrv:server=$server;Database = $database", $user, $password);
    
    $input1 = "input1";
    $input2 = "input2";
    $return_value = -1;
    
    $proc = '{? = CALL sp_Name (?, ?) }';
    $stmt = $sql->prepare( $proc );
    $stmt->bindParam(1,$return_value ,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,4);
    $stmt->bindParam(2,$input1,PDO::PARAM_STR);
    $stmt->bindParam(3,$input2,PDO::PARAM_STR);
    
    $stmt->nextRowset(); //skip INSERT result
    
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    /* Display the value of the output parameter  */
    echo "Return value: ".$return_value.'<br>';
    

    【讨论】:

      【解决方案2】:

      您的存储过程需要包含“SET NOCOUNT ON”语句,以便其中的插入语句不需要您调用 nextRowset() 方法。

      【讨论】:

        【解决方案3】:

        也许manual 这个表格有帮助

          // Example #4 Calling a stored procedure with an output parameter
        
          $stmt = $dbh->prepare("CALL sp_returns_string(?)");
          $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 
        
          $stmt->execute();
        
          print "procedure returned $return_value\n";
        
        
          // Example #5 Calling a stored procedure with an input/output parameter
        
          $stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
          $value = 'hello';
          $stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
        
          $stmt->execute();
        
          print "procedure returned $value\n";
        

        【讨论】:

        • 谢谢,但我都试过了,但都没有用...有人做过这个并且有一个来自他的代码库的工作示例吗?
        猜你喜欢
        • 2013-12-06
        • 2018-07-03
        • 2013-07-26
        • 2023-03-23
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多