ホームページ >バックエンド開発 >PHPチュートリアル >リンク サーバーを使用して mssql ストアド プロシージャを呼び出すときに問題が発生する

リンク サーバーを使用して mssql ストアド プロシージャを呼び出すときに問題が発生する

WBOY
WBOYオリジナル
2016-06-23 14:03:44849ブラウズ

php がリンク サーバーを使用して mssql ストアド プロシージャを呼び出したときにエラーが発生しました。同様の問題に遭遇した人はいますか?
//他のステートメントは省略します
$queryP= "exec OA_pfm_attend_group_toExempt @begin='$DATE1',@end=' $DATE2' ";
$cursor = msexequery($msconnection, $queryP);
//他のステートメントは省略します
// 結合された $queryP は次のとおりです: exec OA_pfm_attend_group_toExempt @begin='2013-03-01',@ end='2013-03 -24'
リンクサーバーを使用してステートメントをすべて削除した後、ストアドプロシージャの実行に問題がないということは本当ですか。 PHP によって呼び出されるストアド プロシージャはリンク サーバーを使用できませんか? ASP を作成して問題があるかどうかを確認してみます [テスト後、ストアド プロシージャを ASP で実行すると問題はありません]

php エラー メッセージは表示されません。参照値:
エラー #0:
SQL ステートメント: exec OA_pfm_attend_group_toExempt @begin='2013-03-01',@end= '2013-03-24'
sqlserver イベント追跡およびログ情報には有用な情報が見つかりません。

ストアド プロシージャ コード:

drop proc OA_pfm_attend_group_toExemptgoCreate proc OA_pfm_attend_group_toExempt@begin datetime,@end datetimeasbegin  set nocount on  set ANSI_WARNINGS on  set ANSI_NULLS on  --declare @begin datetime  --declare @end datetime  --set @begin = @beginSTR  --set @end   = @endSTR  create table #query_Table_Temp (    checkDay datetime not null   ,checkIn  datetime not null   ,checkOut datetime not null   ,isHoliday bit not null default 0  )  declare @checkDay datetime  declare @checkIn datetime  declare @checkOut datetime  set @checkDay = @begin  while (@checkDay<=@end) begin    set @checkIn  = convert(varchar(10),@checkDay)+' 08:35:00'    set @checkOut = convert(varchar(10),@checkDay)+' 18:30:00'    insert into #query_Table_Temp (checkDay,checkIn,checkOut) values(@checkDay,@checkIn,@checkOut)    --update #query_Table_Temp set isHoliday=1 where checkDay in (select Holiday from OPENQUERY(OAMySQL, 'SELECT * from a_rest_holiday'))    set @checkDay = dateadd(day,1,@checkDay)  end  delete from #query_Table_Temp where checkDay in (select Holiday from OPENQUERY(OAMySQL, 'SELECT * from a_rest_holiday'))--这句引起出错,把这些调用链接服务器的所有语句删除就举出错  create table #attend_Temp(   checkDay datetime not null  ,userID int  ,Name varchar(30)  ,User_ID varchar(30)  ,dept_ID int  ,defCheckIn datetime  ,defCheckOut datetime  ,checkIn datetime null  ,checkOut datetime null  ,rest bit not null default 0  ,leave1 bit not null default 0  ,leave2 bit not null default 0  ,out1 bit not null default 0  ,out2 bit not null default 0  ,evection bit not null default 0  )  insert #attend_Temp (checkDay,userID,Name,User_ID,dept_ID,defCheckIn,defCheckOut)  select a.checkDay,b.UserID,b.Name,b.oa_UserID,b.defaultDeptID,a.checkIn,a.checkOut from #query_Table_Temp a join FileServiceDB.dbo.UserInfo b on 1=1 where b.Active=1 and b.checkFree=0  --select a.checkDay,a.checkIn,a.checkOut,b.UserID,b.Name,b.defaultDeptID,b.oa_UserID from #query_Table_Temp a join FileServiceDB.dbo.UserInfo b on 1=1 where b.Active=1 and b.checkFree=0  update #attend_Temp set checkIn=(select min(checkTime) from OA_checkInOut where userID=#attend_Temp.userID and datediff(minute,checkTime,#attend_Temp.defCheckIn) between -150 and 210)  update #attend_Temp set checkOut=(select max(checkTime) from OA_checkInOut where userID=#attend_Temp.userID and datediff(minute,#attend_Temp.defCheckOut,checkTime) between -270 and 690)  --其它语句  select checkDay,(select count(*) from #attend_Temp where checkDay=#query_Table_Temp.checkDay and checkIn>#query_Table_Temp.checkIn and out1=0 and leave1=0 and rest=0 and evection=0) as 迟到人次    ,(select count(*) from #attend_Temp where checkDay=#query_Table_Temp.checkDay and checkOut<#query_Table_Temp.checkOut and out2=0 and leave2=0 and rest=0 and evection=0) as 早退人次    ,(select count(*) from #attend_Temp where checkDay=#query_Table_Temp.checkDay and checkIn is null and out1=0 and leave1=0 and rest=0 and evection=0) as 上班未登记人次    ,(select count(*) from #attend_Temp where checkDay=#query_Table_Temp.checkDay and checkOut is null and out2=0 and leave2=0 and rest=0 and evection=0) as 下班未登记人次    from #query_Table_Temp  drop table #query_Table_Temp  drop table #attend_Temp  set nocount offendGO


ディスカッションに返信 (解決策)

msexequery は php 関数ですか?
なぜ今までこれを見なかったのですか?

ああ、本当に奇妙です。mssql_query を使用すると機能しないことがわかりましたが、odbc_exec に変更すると正常に機能します。まず odbc_exec を使用します。

msexequery はラップされた関数であり、元々は mssql_query が使用されていました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。