powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php sqlsrv передача длинных строк в процедуру
4 сообщений из 4, страница 1 из 1
php sqlsrv передача длинных строк в процедуру
    #39901586
sKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, доброго времени суток.

ОС CentOS 7.5, FreeTDS версии 1.1.20, SQLSRV версии 5.3.0.

Как передать строку nvarchar более 4000 символов через драйвер php sqlsrv в процедуру?

Есть процедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
ALTER PROCEDURE test_proc 
 @in1 as nvarchar(max),
 @out2 int OUTPUT
AS
begin
 SELECT @out2 = len(@in1);
end


при попытке передать параметр
Код: php
1.
2.
3.
SQLSRV_PARAM_IN,
SQLSRV_PHPTYPE_STRING('UTF-8'),
SQLSRV_SQLTYPE_NVARCHAR(4001)


возвращается ошибка
Код: sql
1.
2.
3.
SQLSTATE: IMSSP
code:     -31
message:  An invalid size or precision for parameter 1 was specified.


если при вызове использовать
Код: php
1.
SQLSRV_SQLTYPE_NVARCHAR('max')


то в процедуру приходит только 4000 символов, параметр @out2 из процедуры возвращается 4000.

Вызов процедуры:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$str1 = '...6000+ символов...';
$str2 = 0;
$params = [
    [
        &$str1,
        SQLSRV_PARAM_IN,
        SQLSRV_PHPTYPE_STRING('UTF-8'),
        SQLSRV_SQLTYPE_NVARCHAR(4001)
    ],
    [
        &$str2,
        SQLSRV_PARAM_INOUT,
        SQLSRV_PHPTYPE_INT,
        SQLSRV_SQLTYPE_INT
    ]
];
$sql = "{call test_proc (?,?)}";



Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
php sqlsrv передача длинных строк в процедуру
    #39901803
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дока?
...
Рейтинг: 0 / 0
php sqlsrv передача длинных строк в процедуру
    #39901808
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторThe following code opens an image as a stream and then sends the file up to the server in parts up to 8KB at a time:

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/cc793139(v=sql.90)?redirectedfrom=MSDN#_Ref203922394
...
Рейтинг: 0 / 0
php sqlsrv передача длинных строк в процедуру
    #39902116
sKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow, спасибо большое, идея хороша, но не взлетело :(

возникает ошибка "[FreeTDS][SQL Server]Invalid string or buffer length".
Решил задачу по-другому: сконкатинировал все строки в скрипт вызова ф-ции на T-SQL, и закинул его в сервер. Правда возникла проблема с кодировкой, но это уже мелочи :).
Ещё множественные OUTPUT будут криво поддерживаться, но они пока и не нужны. Пока будет костыль!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php sqlsrv передача длинных строк в процедуру
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]