//////////////////////
//存储过程为
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();
http://bbs.csdn.net/topics/390378066
哪位大哥知道有用过吗?//////////////
其他的总结如下
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;