2011-11-10 228 views
0

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

<?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. 
    } 
    } 
<? 

回答

1

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

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

没有(),PHP认为,作为一个未定义的常量和输出什么。使用(),这是一个函数调用,它将返回来自数据库调用的错误消息。

尝试重新运行你的代码,看看有什么错误。

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. 
    } 
    }?> 

如果过程不存在,你会得到一个错误,说程序无法找到

0

您需要定义您的PARAMS在查询

call rpt_TOP_PRODUCTS(?,?) 
0

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

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

到:

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

而且它应该运行得很好。