Проблема с форматом PHP MS SQL ID - PullRequest
3 голосов
/ 18 февраля 2011

Я рисую записи в PHP из устаревшей базы данных MSSQL, созданной для / с помощью приложения ASP.net.

Идентификаторы в ASP отображаются в виде длинных цепочек чисел, но при извлечении из PHP имеют такую ​​форму:

3;Í}±¯I©ûzƒgŸó

Ответы [ 4 ]

4 голосов
/ 05 января 2017

В PHP 7 и более поздних версиях вам теперь нужно «сказать» PDO, что нужно использовать строковое представление GUID при его возврате, а не двоичное представление по умолчанию.

См .: https://github.com/php/php-src/pull/2001

Решение:

     /* $db represent the PDO connection */
     $db->setAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true);
1 голос
/ 18 февраля 2011

Готов поспорить, что идентификаторы на самом деле являются GUID - если это так, вы захотите преобразовать свои GUID в строки, используя mssql-guid-string (или если вы используете PHP 5.3 или новее вам нужно использовать расширение Microsoft SqlSrv , которое должно автоматически преобразовывать поля GUID.)

0 голосов
/ 28 августа 2017

установить в связи следующий атрибут PDO :: DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER как истина

источник https://github.com/php/php-src/pull/2001

0 голосов
/ 22 мая 2017

Используйте эту функцию. Он возвращает центрированный mssql id. Пример: G4G3G2G1-G6G5-G8G7-G9G10-G11G12G13G14G15G16

 function convertBinToMSSQLGuid($binguid)
 {
    $unpacked = unpack('Va/v2b/n2c/Nd', $binguid);
    return sprintf('%08X-%04X-%04X-%04X-%04X%08X', $unpacked['a'], $unpacked['b1'], $unpacked['b2'], $unpacked['c1'], $unpacked['c2'], $unpacked['d']);
 }
...