PHP: 7 PDO-Abruf (Alle) versucht, Typen in zugeordneten Typ zu konvertieren
Heute habe ich herausgefunden, dass unser Code mit einer Änderung der PDO abwärtskompatibel zu sein scheint. In PHP <5.6 werden die Ergebnismengen von einemPDOStatement
durch seine Funktionenfetch
undfetchAll
gibt Zeilen zurück, deren Werte entweder eine Zeichenfolge oder null sind. Unser Code basiert auf diesem Attribut.
Vor einiger Zeit haben wir auf PHP 7 aktualisiert. Es stellt sich heraus, dass PDO nun versucht, @ zu konvertiereetwa Datentypen zu anderen zugeordneten Typen. Zum Beispiel einFLOAT
-Spalte erstellt einen Gleitkommawert imPDOStatement
Ergebnismenge. Und einTINYINT
ie Spalte @ erstellt einen ganzzahligen Wert in der Ergebnismenge. Interessanterweise einBIGINT
oder ein großesINT UNSIGNED
wird als Zeichenfolge angezeigt, wenn es nicht als Ganzzahl angezeigt werden kann, sowie bei bestimmten anderen Typen (z. B.DECIMAL
) werden nicht in irgendetwas konvertiert. Sie bleiben Fäden. Ich dachte, es war ein allgemein anerkanntes Prinzip, dass die Konvertierung von Datentypen aus einer MySQL-Datenbank in PHP-Datentypen problematisch ist und nicht von PHP selbst durchgeführt werden sollte, aber anscheinend hat PHP 7 eine andere Entscheidung getroffen.
as PDO von @So PHP 7 führt eine Reihe von Konvertierungsregeln ein, die es intern verwendet, um aus einer Datenbank ausgewählte Werte zu konvertieren, die jedoch meine Codebasis durcheinander bringen. Aufgrund der Inkonsistenzen dieser Konvertierungsregeln würde ich meine Codebasis lieber nicht in ändern zu ihnen passen. Gibt es vielleicht eine Einstellung oder ein Flag, das ich umschalten kann, um zu verhindern, dass PDO die abgerufenen Werte konvertiert?