Ich habe diese Frage einige Male bei Stack Overflow wiederholt gesehen, aber keiner hat das Problem ausreichend untersucht (oder zumindest auf eine Weise, die für mich hilfreich ist).
Das Problem ist, dass eine DB-Abfrage ganzzahlige Datentypen in PHP für ganzzahlige Spalten zurückgeben sollte. Stattdessen gibt die Abfrage jede Spalte als Zeichenfolgentyp zurück.
Ich habe sichergestellt, dass "PDO :: ATTR_STRINGIFY_FETCHES" falsch ist, nur um sicherzustellen, dass die Ergebnisse nicht in Zeichenfolgen umgewandelt werden.
Antworten, die ich gesehen habe:
- Das geht nicht
- Nein, es funktioniert unter Mac OS X installiertem PHP / MySQL
- Geben Sie cast all Ihre Werte in Ihren Code ein
- Nein, das werde ich nicht tun
- Mach dir keine Sorgen, PHP ist lose geschrieben
- Meine Daten werden als JSON ausgegeben und von vielen anderen Diensten verwendet. Einige erfordern die Daten im richtigen Format
Aus meiner Forschung geht hervor, dass dies ein Problem bei der Treiberimplementierung ist.
Viele Quellen behaupten, dass der native MySQL-Treiber die Rückgabe numerischer Typen nicht unterstützt. Dies scheint nicht zu stimmen, da es unter Mac OS X funktioniert. Es sei denn, sie wollen sagen, dass "der native MySQL-Treiber unter Linux die Funktion nicht unterstützt".
Dies bedeutet, dass der Treiber / die Umgebung, die ich unter Mac OS X installiert habe, etwas Besonderes ist. Ich habe versucht, die Unterschiede zu identifizieren, um einen Fix anzuwenden, bin jedoch durch meine Kenntnisse zur Überprüfung dieser Dinge eingeschränkt.
Die Unterschiede:
- PHP unter OS X wurde über Home Brew kompiliert und installiert
- PHP unter Ubuntu wurde über "apt-get install php5-dev" installiert.
- PHP unter OS X stellt eine Verbindung zu einem MySQL-Server her, der auch unter OS X ausgeführt wird
- Serverversion: 5.1.71-log Quelldistribution
- PHP unter Ubuntu stellt eine Verbindung zu einer Rackspace Cloud-Datenbank her
- Serverversion: 5.1.66-0 + Squeeze1 (Debian)
Ubuntu-Umgebung
- Version: 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (erstellt: 21. Oktober 2013 08:14:37)
php -i
pdo_mysql
PDO-Treiber für MySQL => aktivierte Client-API-Version => 5.1.72
Mac OS X-Umgebung
- 10.7.5
- PHP 5.4.16 (cli) (erstellt: 22. August 2013, 09:05:58 Uhr)
php -i
pdo_mysql
PDO-Treiber für MySQL => aktivierte Client-API-Version => mysqlnd 5.0.10 - 20111026 - $ Id: e707c415db32080b3752b232487a435ee0372157 $
PDO-Flags verwendet
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
Jede Hilfe und Sachkenntnis wäre dankbar :) Ich werde auf jeden Fall wieder hier posten, wenn ich die Antwort finde.