mssql_guid_string() liefert falschen String

Athor

Mitglied
Hallo zusammen

Stehe grad etwas verwirrt in der Landschaft herum hier.

Unsere Tabelle welche in einer MS-SQL Datenbank sind, beinhalten ein Feld welches vom Typ "uniqueidentifier" ist.

Wenn man via PHP dieses Feld nun abfragt bekommt man einen 16Stelligen Hex-Code. Dieser kann man mit Hilfe von "mssql_guid_string" in einen verwendbaren String konvertieren lassen. Soweit so gut.

Nun hab ich aber (mindestens) einen Fall wo die Konvertierung falsch ist.

In der Datenbank ist folgender Wert : 5C8F3171-4EE2-4374-927F-72CF1C9C8B0A
Die Funktion liefert mir aber diesen Wert 5C8F3171-4EE2-4374-927F-72CF1C9C8B0D

Wenn man natürlich dann ein "update xy set a = b where uid = <key>" macht, geht das ganz schön in die Hosen ;-)

Hat von Euch jemand ne Idee was das sein kann, oder hat ne andere möglichkeit den Hex-Key in einen brauchbaren String zu wandeln?

Grüsse
Dani

P.S.
Benutze PHP 5.2.3 und Apache 2.2.4
 
Hi Anthon,

ohne zu wissen, wo das Problem liegt,... Auf PHP.net ist eine Alternative:

Code:
function presentGUID($string)
    {

      $hex = '';
      $len = strlen($string);

      $bytes = array();
      for ($i = 0; $i < $len; $i++)
      {
        $bytes [$i] = strtoupper(str_pad(dechex(ord($string[$i])), 2, 0, STR_PAD_LEFT));
      }

      $this->swapbyte ($bytes[0], $bytes[3]);
      $this->swapbyte ($bytes[1], $bytes[2]);
      $this->swapbyte ($bytes[4], $bytes[5]);
      $this->swapbyte ($bytes[6], $bytes[7]);

      $hex = "{";
      for ($i = 0; $i < $len; $i++)
      {
        switch ($i)
        {
          case 4:
          case 6:
          case 8:
          case 10:
            $hex .= "-";
        }

        $hex .= $bytes[$i];
      }
      $hex .= "}";

      return $hex;

    }

    function swapbyte(&$value1, &$value2)
    {
      $tmp = $value1;
      $value1 = $value2;
      $value2 = $tmp;
    }

Teste die doch mal - vielleicht bringt's ja was... Denke aber eher nicht, daß es an der Funktion an für sich liegt. Denke eher, daß da dann irgendwas an deiner DB-Tabelle falsch eingestellt ist!

Mal ganz doof gefragt: Kann es einfach sein, daß bei deinem Schlüssel der Wert für die max. Länge/Größe für die Tabelle überschritten wird und deshalb automatisch nach unten "gestuft" wird? Nur so eine Idee, ohne es zu wissen...

Grüße,

Dirk
 
Vielen Dank für die Antwort.

Habs vorhin auch gefunden und damit erkannt wo das Problem lag.
Es kamen irgendwie 17Bytes anstatt nur 16.

Ich hatte die Variable in einem <input type='hidden'> zwischengelagert, da es mittels "POST" später weitergeleitet wurde. Leider hat das "POST" den Wert wohl irgendwie abgeändert so dass es beim konvertieren zu der Ungereimtheit kam.

Hab nun direkt den konvertierten String im Input drin und so klappt es wunderbar.

Die Funktion arbeitet also richtig *hust* :-)
 
Zurück