Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
07.03.2017, 17:03
|
|||
---|---|---|---|
|
|||
php+mssql |
|||
#18+
если параметры передавать вот в таком виде требует перекодировку входящего параметра из 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)) Это баг драйвера от майкрософт или что-то делаю неправильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.03.2017, 15:26
|
|||
---|---|---|---|
|
|||
php+mssql |
|||
#18+
с форума MSSQL прогнали сюда, уже всё перепробовали вот процедура на стороне MSSQL: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
На данный момент массив выглядит примерно так: $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 = ' '; У нас проблема в том что драйвер отдает какие-то дурные данные (мусор) если процедура возвращает пустую строку Помогите разобраться, в чём может быть проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.03.2017, 15:49
|
|||
---|---|---|---|
php+mssql |
|||
#18+
Игорь_UUS, это вся процедура? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.03.2017, 16:22
|
|||
---|---|---|---|
|
|||
php+mssql |
|||
#18+
ИзопропилИгорь_UUS, это вся процедура? Код: sql 1. 2. 3. 4. 5. 6.
Пускай будет вся ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.03.2017, 18:39
|
|||
---|---|---|---|
php+mssql |
|||
#18+
Игорь_UUS, скорее бага. их там есть, например, имена полей всегда в текущей локали возвращаются. что делать? - варианты: 1)не использовать выходных параметров, доп рекордсет вернуть 2)вернуть SQLSRV_SQLTYPE_NVARCHAR('max') 3)в процедуре NULL вместо пустой строки присвоить 4) править багу в драйвере. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.03.2017, 18:58
|
|||
---|---|---|---|
|
|||
php+mssql |
|||
#18+
ИзопропилИгорь_UUS, скорее бага. их там есть, например, имена полей всегда в текущей локали возвращаются. что делать? - варианты: 1)не использовать выходных параметров, доп рекордсет вернуть 2)вернуть SQLSRV_SQLTYPE_NVARCHAR('max') 3)в процедуре NULL вместо пустой строки присвоить 4) править багу в драйвере. спасибо! тоже склоняемся что бага(( ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.03.2017, 23:14
|
|||
---|---|---|---|
php+mssql |
|||
#18+
Игорь_UUSспасибо! тоже склоняемся что бага(( при желании можно конкретно откопать, но желания нет. грубо говоря - если используется SQLSRV_ENC_CHAR - перекодировка из NVARCHAR возлагается на ODBC, в если требуется UTF-8 - пхпшный драйвер буферы выделяет в UTF-16 и сам занимается перекодировкой ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=23&tablet=1&tid=1460727]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 302ms |
total: | 440ms |
0 / 0 |