Я сохранил процедуры на SQL сервере, который выводит данные как xml тип данных. Когда я пытаюсь получить выходной параметр в PHP с PHP драйвером для SQL сервера (расширение sqlsrv
) и длина строки превышает 4000, я получаю ошибку SQL (SQLSTATE 01004 (усеченные данные)) .
Вот краткий пример:
Хранимая процедура:
CREATE PROCEDURE pr_getlargexml
@xml xml OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET @xml =
(
SELECT *
FROM largeTable
FOR XML RAW, ELEMENTS, TYPE, ROOT('xml')
);
END;
GO
PHP код:
$serverName = "localhost\SQL2012TEST";
$connectionInfo = array("Database" => "TEST", "UID" => "", "PWD" => "");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
die(print_r(sqlsrv_errors(), true));
}
$retval = '';
$query = sqlsrv_query($conn, 'EXEC pr_getlargexml ?',array(array(&$retval,SQLSRV_PARAM_OUT,SQLSRV_PHPTYPE_STRING('UTF-8'),SQLSRV_SQLTYPE_XML)));
if ($query === false) {
die(print_r(sqlsrv_errors(), true));
}
echo "";
\var_dump($retval);
echo "
";
Если xml короче 4000, он работает нормально. Я также пытался использовать nvarchar(max)
в качестве типа данных в sql и SQLSRV_SQLTYPE_NVARCHAR('max')
в php в качестве sqltype, но я получаю ту же ошибку.
У кого-нибудь есть решение моей проблемы?