Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php+mssql / 7 сообщений из 7, страница 1 из 1
07.03.2017, 17:03
    #39415621
Игорь_UUS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
если параметры передавать вот в таком виде требует перекодировку входящего параметра из utf-8 в cp1251 и исходящего из cp1251 в utf-8:

$call = "{call ProcedureName(?, ?)}";

$data = [
[$inParam, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NVARCHAR(900)],
[&$outParam, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NVARCHAR(256)]
];

а вот в таком происходит странное - если исходящий параметр является пустой строкой, то переменная наполняется мусором из оперативной памяти, но в остальных случаях перекодировка не нужна:
$data = [
[$inParam, SQLSRV_PARAM_IN],
[&$outParam, SQLSRV_PARAM_OUT, null, SQLSRV_SQLTYPE_NVARCHAR(256)]
];

Получается, если в хранимой процедуре переменной передать @Text ='' (<--OUTPUT) , то на стороне php мусор размером 256 байт (SQLSRV_SQLTYPE_NVARCHAR(256))

Это баг драйвера от майкрософт или что-то делаю неправильно?
...
Рейтинг: 0 / 0
08.03.2017, 15:26
    #39415862
Игорь_UUS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
с форума MSSQL прогнали сюда, уже всё перепробовали

вот процедура на стороне MSSQL:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE [TT_Test]
  ..
  ..
  -- Описание ответа.
  @AnswerText	NVARCHAR(256) = '' OUTPUT
AS
 ..
 ..
 SET @AnswerText = ''
 RETURN 0
GO



На данный момент массив выглядит примерно так:
$data = [
[$inParam, SQLSRV_PARAM_IN],
[&$outParam, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING('UTF-8'), SQLSRV_SQLTYPE_NVARCHAR(256)]
]

Переменная $outParam передается по ссылке. Естественно она инициализируется перед передачей. При этом абсолютно неважно как она инициализируется.
$outParam = 0;
$outParam = NULL;
$outParam = '';
$outParam = ' ';


У нас проблема в том что драйвер отдает какие-то дурные данные (мусор) если процедура возвращает пустую строку

Помогите разобраться, в чём может быть проблема?
...
Рейтинг: 0 / 0
08.03.2017, 15:49
    #39415872
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
Игорь_UUS,

это вся процедура?
...
Рейтинг: 0 / 0
08.03.2017, 16:22
    #39415882
Игорь_UUS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
ИзопропилИгорь_UUS,

это вся процедура?

Код: sql
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE [TT_Test]
  -- Описание ответа.
  @AnswerText	NVARCHAR(256) = '' OUTPUT
AS
 SET @AnswerText = ''
 RETURN 0



Пускай будет вся
...
Рейтинг: 0 / 0
08.03.2017, 18:39
    #39415905
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
Игорь_UUS,

скорее бага. их там есть, например, имена полей всегда в текущей локали возвращаются.

что делать? - варианты:
1)не использовать выходных параметров, доп рекордсет вернуть
2)вернуть SQLSRV_SQLTYPE_NVARCHAR('max')
3)в процедуре NULL вместо пустой строки присвоить
4) править багу в драйвере.
...
Рейтинг: 0 / 0
08.03.2017, 18:58
    #39415910
Игорь_UUS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
ИзопропилИгорь_UUS,

скорее бага. их там есть, например, имена полей всегда в текущей локали возвращаются.

что делать? - варианты:
1)не использовать выходных параметров, доп рекордсет вернуть
2)вернуть SQLSRV_SQLTYPE_NVARCHAR('max')
3)в процедуре NULL вместо пустой строки присвоить
4) править багу в драйвере.

спасибо! тоже склоняемся что бага((
...
Рейтинг: 0 / 0
08.03.2017, 23:14
    #39415956
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php+mssql
Игорь_UUSспасибо! тоже склоняемся что бага((
при желании можно конкретно откопать, но желания нет.

грубо говоря - если используется SQLSRV_ENC_CHAR - перекодировка из NVARCHAR возлагается на ODBC,
в если требуется UTF-8 - пхпшный драйвер буферы выделяет в UTF-16 и сам занимается перекодировкой
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php+mssql / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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