从PHP调用MS SQL存储过程

时间:2011-11-10 14:38:04

标签: php

我有一个在MSSQL 2008 R2中运行的存储过程,我正在使用PHP 5.3,我可以成功连接到数据库并检索数据,但我一直在尝试调用存储过程并且没有成功,我需要将参数传递给存储过程然后在这里得到结果是我的代码,但它没有成功执行。任何人请举例说明我如何做到这一点。

<?PHP
  $sql = " { call rpt_TOP_PRODUCTS } ";//my stored procedure
  $param1 = 10;
  $param2 = 'E';
  $param3 = 'SZ';
     $params = Array(Array($param1,$param2,$param3, SQLSRV_PARAM_IN)//parameters to be     passed  );
    $stmt = sqlsrv_query($conn,$sql,$params);

      if ($stmt===false) {
       // handle error
   echo 'Success No';//THIS IS WHERE ITS GOING WHEN I RUN THE CODE
       print_r(sqlsrv_errors,true);
      } else {
         if (sqlsrv_execute($stmt)===false) {
        // handle error.  This is where the error happens
         print_r(sqlsrv_errors,true);
     echo 'Success Not ';
      } else {


  echo 'Success True Yeah';//THIS IS WHERE I WANT IT TO COME.
    }
  }
<?

4 个答案:

答案 0 :(得分:1)

你的print_r()调用是错误的,它们应该是

print_r(sqlsrv_errors(), false);
                     ^^---missing in yours

如果没有(),PHP会将其视为未定义的常量并且不输出任何内容。使用(),它是一个函数调用,它将从数据库调用中返回错误消息。

尝试重新运行代码并查看错误。

答案 1 :(得分:0)

试试这个

<?php
 $sql = " { call rpt_TOP_PRODUCTS} ";//my stored procedure
$param1 = 10;
  $param2 = 'E';
  $param3 = 'SZ';
$params = array($param1,$param2,$param3);//parameters to be     passed  );
    $stmt = sqlsrv_prepare($conn,$sql,$params)or die(print_r(sqlsrv_errors(),true));

      if ($stmt===false) {
       // handle error
   echo 'Success No';//THIS IS WHERE ITS GOING WHEN I RUN THE CODE
       print_r(sqlsrv_errors(),true);
      } else {
         if (sqlsrv_execute($stmt)===false) {
        // handle error.  This is where the error happens
         print_r(sqlsrv_errors(),true);
     echo 'Success Not ';
      } else {


  echo 'Success True Yeah';//THIS IS WHERE I WANT IT TO COME.
    }
  }?>

如果您的程序不存在,您将收到错误消息,指出无法找到该程序

答案 2 :(得分:0)

您需要定义参数在查询中的位置

    call rpt_TOP_PRODUCTS(?,?)

答案 3 :(得分:0)

迟到总比没有好。 Marc B对你的print_r函数是正确的。此外,使用sqlsrv PHP函数,您必须先准备一个带有“sqlsrv_prepare()”的查询,然后才能执行它。只需改变:

$stmt = sqlsrv_query($conn,$sql,$params)

为:

$stmt = sqlsrv_prepare($conn,$sql,$params)

它应该运行得很好。