//////////////////////
//存储过程为
if exists (select * from sysobjects where id = object_id('dbo.test_procedure') and sysstat & 0xf = 4)
    drop procedure dbo.test_procedure
GO
create procedure test_procedure
@ou VARCHAR(10) output
as 
begin 
set @ou='123'
end;
/////////////////////
//以下用ado连接,或者直接用php连接函数,
//php文件 在window下正常的,可以输出123,
//在linux上报错 Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed 
//在linux上使用 freetds,
//在linux上,不调用存储过程,直接写一些sql,是执行正常的
//难道linux上,php 不能调用mssql的存储过程吗?
$db_sql_mc = &ADONewConnection('mssql');//数据库驱动
$ddbb=$db_sql_mc->Connect(
'172.172.172.172',
'sa',
'',
'myshop'
);
if(empty($ddbb)){//如果连接没有成功
exit('err');
}else{
$db_sql_mc->debug=1; $r="";
$stmt=$db_sql_mc->PrepareSP("test_procedure");
$db_sql_mc->OutParameter($stmt,$r,'ou',10,SQLVARCHAR);
$db_sql_mc->Execute($stmt); 
echo $r; exit;
}//////////////////$r="";
$dblink=mssql_connect('172.172.172.172','sa','') or die("can't connect to mssql"); 
mssql_select_db('myshop',$dblink)   or die("can't select sample");
$sp = mssql_init("test_procedure",$dblink);  
mssql_bind($sp,"@ou",$r,SQLVARCHAR,TRUE,FALSE,10);
mssql_execute($sp);echo $r;echo mssql_get_last_message();

解决方案 »

  1.   

    估计问题差不多,无力回天!解决了也告诉我一声
    http://bbs.csdn.net/topics/390378066
      

  2.   

    难道还需要在linux上建立sqlserver服务吗?如果可以的话,应该没问题吧。
      

  3.   

    自己测试差不多了,不过在linux上依然不能获得绑定的返回参数,只能去获得select结果集
    哪位大哥知道有用过吗?//////////////
    其他的总结如下
    php使用mssql存储过程一、连接
    -----------------------
    1.php在linux上时,连接要使用freetds配置的服务器别名,不能使用ip。php在window上,可以直接使用ip
    2.freetds配置时,需要配置版本8.0
    3.如果还有报错,配置定义编码为GBK,或者GB2312(大写)。可以放在[GLOBAL]段里面freetds配置如下
    [mssql_test75]
    host=172.75.75.75
    port=1433
    tds version = 8.0
    client charset = GBK
    二、存储过程
    -----------------------
    存储过程可以定义3种返回
    1、定义output参数
    2、写return
    3、select * from table例如:
    if exists (select * from sysobjects where id = object_id('test_procedure') and sysstat & 0xf = 4)
        drop procedure test_procedure
    GO
    create procedure  test_procedure
    @ou varchar(6) OUTPUT
    as 
    begin 
    set @ou='123'
    select @ou,456
    end;三、调用
    -----------------------////////////////////////
    //----------------linux下使用ado,只能获得存储过程的select结果集$db_sql_mc = &ADONewConnection('mssql');
    $ddbb=$db_sql_mc->Connect(
    'mssql_test75',
    'sa',
    '',
    'myshop'
    );
    if(empty($ddbb)){
    echo 'err';
    }else{
    $db_sql_mc->debug=1; $nReturnValue="";//绑定的返回参数
    $procName="test_procedure";//存储过程名称
    $stmt=$db_sql_mc->PrepareSP($procName);
    $db_sql_mc->OutParameter($stmt,$nReturnValue,'ou',10,SQLVARCHAR);
    $rs_cp =$db_sql_mc->Execute($stmt); 
    while (!$rs_cp->EOF){
    echo $rs_cp->fields[0],' --', $rs_cp->fields[1],"<BR>";//正常输出
    $rs_cp->MoveNext();
    } echo $nReturnValue;//没有输出
    }
    exit;//----------------linux下使用php函数,只能获得存储过程的select结果集$info="";
    $dblink=mssql_connect('mssql_test75','sa','sa') or die("can't connect to mssql");
    mssql_select_db('myshop',$dblink)   or die("can't select sample");
    $sp = mssql_init("test_procedure",$dblink);  
    mssql_bind($sp,"@ou",&$info,SQLVARCHAR,TRUE,FALSE,10); 
    $rs=mssql_execute($sp);
    do {
    while ($row = mssql_fetch_row($rs)) {
    echo "$row[0] -- $row[1]<BR>";//正常输出
    }
    } while (mssql_next_result($rs));
    mssql_free_result($rs);
    echo $info;//没有输出die('MSSQL error: ' . mssql_get_last_message());
    //////////////
    //----------------------window下,使用php函数,可以获得绑定参数,和select结果集
    $info="";
    $dblink=mssql_connect('172.75.75.75','sa','') or die("can't connect to mssql"); 
    mssql_select_db('myshop',$dblink)   or die("can't select sample");
    $sp = mssql_init("test_procedure",$dblink);  
    mssql_bind($sp,"@ou",$info,SQLVARCHAR,TRUE,FALSE,6); ///////////////////////////////可以这样直接获得输出的绑定参数
    //$rs=mssql_execute($sp,true);
    //echo $info;
    //exit;///或者,这样返回select的结果集
    $rs=mssql_execute($sp);
    do {
    while ($row = mssql_fetch_row($rs)) {
    echo "$row[0] -- $row[1]<BR>";
    }
    } while (mssql_next_result($rs));
    mssql_free_result($rs);//此时也可以获得输出的绑定参数
    echo $info;die('MSSQL error: ' . mssql_get_last_message());exit;