Вызов хранимой процедуры SQL Server в PHP - не удается получить данные XML, которые он возвращает обратно в php - PullRequest
0 голосов
/ 11 сентября 2009

Попытка вызова хранимой процедуры SQL SERVER из php. Думаю, у меня это работает, но я не могу получить данные, которые он возвращает обратно в php. Я копирую свой php-код, а также пример кода SQL SERVER ниже.

Поверьте, моя проблема в том, как получить данные из reportData? mssql_execute () просто возвращает логическое значение true. Похоже, процедура сохраняет данные в reportData в формате xml. Однако, когда я пытаюсь использовать mssql_bind (), чтобы получить данные в 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 

Если я изменю тип mssql_bind с SQLVARCHAR на SQLTEXT, я получу эту ошибку.

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. 

Также ... если я не использую mssql_bind, как этот, чтобы он не пытался вернуть данные в reportData, он работает без ошибок и возвращает true, но я понятия не имею, как получить нужные данные.

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

В этом случае, если я пытаюсь выполнить этот запрос после моего вызова 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
    @reportData=@reportData out
    ,@portfolios = @portfolios
    ,@date = @date

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

1 Ответ

0 голосов
/ 11 сентября 2009

Вам необходим собственный клиент SQL Server для PHP , чтобы использовать новые типы данных, такие как XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...