PHP MS SQL-ID-Format Problem

Ich zeichne datasätze in PHP von einer älteren MSSQL-database, die für eine ASP.net-Anwendung erstellt wurde.

Die id's in ASP erscheinen als lange characterfolgen, aber wenn von PHP abgerufen werden in einer Form wie folgt:

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

Ich werde wetten, dass die IDs eigentlich GUIDs sind – wenn ja, dann möchtest du deine GUIDs in Strings mithilfe von mssql-guid-string umwandeln (oder wenn du PHP 5.3 oder später benutztest, dann willst du die SqlSrv- Erweiterung von Microsoft verwenden , die GUID-Felder automatisch umwandeln sollen.)

In PHP 7 und oben musst du jetzt dieses "tell" PDO machen, um die String-Darstellung der GUID zu verwenden, wenn du sie zurückgibst, im Gegensatz zur Standard-Binärdarstellung.

Siehe: https://github.com/php/php-src/pull/2001

Lösung:

  /* $db represent the PDO connection */ $db->setAttribute(PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true); 

Verwenden Sie diese function. Es ruft cenverted mssql id zurück. Beispiel: 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']); } 

In Verbindung setzen nach Attribut PDO :: DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER als true

Quelle https://github.com/php/php-src/pull/2001