2009-09-11 6 views
0

Essayer d'appeler une procédure stockée SQL SERVER à partir de php. Je pense que je l'ai fonctionné mais je ne peux pas obtenir les données qu'il renvoie en php. Je suis en train de copier mon code PHP ainsi que le code SQL SERVEUR ci-dessous.Appel de procédure stockée SQL Server en PHP - Impossible d'obtenir les données xml retournées dans php

Croyez que mon problème est comment obtenir les données de reportData? mssql_execute() retourne simplement boolean true. Il me semble que la procédure stocke les données dans reportData en tant que xml. Cependant, lorsque j'essaie d'utiliser mssql_bind() pour obtenir les données dans reportData par référence, j'obtiens des avertissements sur la conversion de xml en varchar.

Mon code 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); 

Ce jetteront ces erreurs.

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 

Si je change le type de mssql_bind de SQLVARCHAR À SQLTEXT puis-je obtenir cette erreur.

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. 

Also..if Je n'utilise mssql_bind comme ceci afin qu'il ne cherche pas et renvoyer des données à ReportData il fonctionne sans erreur et retourne vrai, mais je ne sais pas comment je peux obtenir les données J'ai besoin.

mssql_bind($proc, "@reportData", $reportData, SQLVARCHAR); 

Dans ce cas, si je tente et exécuter cette requête après mon appel à mssql_execute je reçois cette erreur.

$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" 

Exemple de code 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) 

Répondre

0

Vous avez besoin du SQL Server Native client for PHP pour tirer parti des nouveaux types de données comme XML.

+0

Je l'ai installé hier. Sans cela, je ne pourrais même pas faire fonctionner mssql_connect(). Quel type de données devrais-je spécifier dans mssql_bind() pour XML? En outre, il est possible que je n'ai pas installé correctement? En regardant phpinfo je vois une section pour sqlsrv qlsrv.LogSeverity sqlsrv.LogSubsystems sqlsrv.WarningsReturnAsErrors \t Sur \t Sur signifie qu'il est doit-activé, non? C'est la DLL que j'ai ajoutée à php.ini merci – Jason

+0

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

+0

Obtenez le type non pris en charge lorsque j'utilise cela. Mssql_bind ($ proc, "@reportData", & $ rapportData, SQLSRV_SQLTYPE_XML, TRUE, FALSE); Avertissement: mssql_bind() [fonction.mssql-bind]: type non pris en charge – Jason

Questions connexes