Попытка вызова хранимой процедуры 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)