2016-07-23 22 views
1

Ich verwende derzeit die pdo_dblib Erweiterung in meinem Projekt. Wenn ich dies unter PHP 5.6 mit FreeTDS Version 7.0 in config. gesetzt verwende, wird es mir die uniqueidentifier als string geben. Wenn ich das gleiche Skript unter PHP 7.0.8 verwende, gibt es mir nur etwas verstümmelte Scheiße. Ich möchte es nicht in SQL werfen oder es später in PHP umwandeln. Weil es manchmal eine eindeutige Identifizierung im Ergebnis sein kann und manchmal nicht. also müsste ich die vollständigen Ergebnisse durchgehen, um den Uniqueidentifier zu konvertieren.PHP7 PDO_DBLIB uniqueidentifier

Also gibt es eine Lösung, um in Arbeit zu PHP 7.0.8 wie es war unter PHP 5.6?

+0

Was ist Ihr Skript? –

Antwort

0

Es sieht so aus, als wäre der Fehler in einer kleineren Version von PHP7 eingeführt worden.

  • 7.0.4 funktioniert einwandfrei. Sie können es manuell mit phpbrew kompilieren.
  • 7.0.8 hat diese Implementierung derzeit gebrochen.

Es gab bereits einen Bug-Report zu diesem Thema eingereicht hier: https://bugs.php.net/bug.php?id=72601

und eine Pull-Anforderung für eine mögliche fix: https://github.com/php/php-src/pull/2001

2

Wie in der Pull-Anforderung in Bojan Antwort erwähnt erklärt, die Ursache dieses Problems in PHP 7 ist, dass Sie PDO anweisen müssen, die GUIDs von binär in eine Zeichenfolge zu konvertieren.

Dies sollte es für jeden tun, der damit zu kämpfen hat.

/** @var \PDO $pdo */ 
    $pdo->setAttribute(\PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER, true); 
+0

Das hat wirklich den Trick gemacht. Vielen Dank, dass Sie darauf hingewiesen haben. – user2432612