2009-09-11 14 views
0

PHPからSQL SERVERストアドプロシージャを呼び出そうとしています。私はそれが働いていると思うが、私はそれがPHPに返すデータを取得することはできません。私は私のPHPコードとサンプルSQL SERVERコードを以下にコピーしています。SQL Serverストアドプロシージャの呼び出し - PHPで返されるxmlデータを取得できません。

私の問題は、reportDataからデータを取り戻すにはどうすればよいですか? mssql_execute()はブール値trueを返します。プロシージャがreportDataにデータをxmlとして格納するように見えます。しかし、mssql_bind()を使用してreferenceによってreportDataにデータを取得しようとすると、xmlからvarcharへの変換に関する警告が表示されます。これらのエラーがスローされます

私のPHPコード

mssql_query("exec ZUSER.pSessionCreate @LoginName = 'admin', @Password = 'xxxx'", $Conn); 
$proc = mssql_init("ZUSER.pAppraisal", $Conn); 
$reportData=""; 
$portfolios=3014; 
$date="08/19/2009"; 
mssql_bind($proc, "@reportData", &$reportData, SQLVARCHAR , TRUE, FALSE, 4000); 
mssql_bind($proc, "@portfolios", $portfolios, SQLVARCHAR); 
mssql_bind($proc, "@date", $date, SQLINT4); 
$result = mssql_execute($proc); 

Warning: mssql_execute() [function.mssql-execute]: message: Implicit conversion from data type xml to varchar is not allowed. Use the CONVERT function to run this query. 
Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed 

私はその後、私はこのエラーを取得するSQLTEXT TO SQLVARCHARからmssql_bindストアドの種類を変更した場合。

Warning: mssql_execute() [function.mssql-execute]: message: Invalid parameter 1 ('@reportData'): Data type 0x23 is a deprecated large object, or LOB, but is marked as output parameter. Deprecated types are not supported as output parameters. Use current large object types instead. 

それがエラーなしで実行され、trueを返しますが、私は、私はデータを得ることができる方法が分からないreportDataにデータを試してみて、返さないように、私はこのようなmssql_bindストアド使用しないAlso..if私は欲しい。

この場合、mssql_executeを呼び出した後にこのクエリを実行しようとすると、このエラーが発生します。

$result=mssql_query("select field1, field2, field3 from ZUSER.pAppraisal(@reportData)", $Conn); 

Warning: mssql_query() [function.mssql-query]: message: Must declare the scalar variable "@reportData" 

例SQL Serverコード:

declare @SessionGuid uniqueidentifier 
declare @portfolios nvarchar(max) 
declare @date datetime 
set @portfolios='3014' 
set @date='08/19/2009' 
exec ZUSER.pSessionCreate @LoginName = 'admin', @Password = 'xxxx' 
declare @reportData xml 
exec ZUSER.pAppraisal 
    @[email protected] out 
    ,@portfolios = @portfolios 
    ,@date = @date 

select field1, field2, field3 from ZUSER.fAppraisal(@reportData) 

答えて

0

あなたは、XMLなどの新しいデータ型を活用するSQL Server Native client for PHPを必要としています。

+0

私は昨日インストールしました。それがなければ、mssql_connect()を動作させることさえできませんでした。 XMLのmssql_bind()で指定するデータ型は何ですか? また、正しくインストールしなかった可能性がありますか? phpinfoを見て、私は右、それが有効になっています意味 万一に sqlsrv.WarningsReturnAsErrors qlsrv.LogSeverity sqlsrv.LogSubsystems SQLSRVため\tで\tをセクションを参照していますか?これは、php.iniに追加したDLLです。 ありがとう – Jason

+0

'SQLSRV_SQLTYPE_XML'です。 http://msdn.microsoft.com/en-us/library/cc296183(SQL.90).aspx –

+0

を参照してください。私はそれを使用するとサポートされていないタイプを取得します。 mssql_bind($ proc、 "@reportData"、&$ reportData、SQLSRV_SQLTYPE_XML、TRUE、FALSE); 警告:mssql_bind()[function.mssql-bind]:サポートされていないタイプ – Jason

関連する問題