2016-07-11 6 views
2

PDO MS SQL Server und PDO MySQL gibt beim Abrufen ein Array von Strings zurück, auch wenn der SQL-Typ der Spalten numerische Typen wie int oder sein sollte schweben. Es ist mir gelungen, das Problem zu umgehen, aber ich möchte verstehen, warum sie so konzipiert wurden. Ist es, weil PDO selbst es nicht unterstützt (oder es vorher nicht unterstützt hat)?PDO SQLSRV und PDO MySQL gibt Strings beim Abrufen von int oder float zurück

+0

Der Typ der Spalte ist nicht wichtig, es definiert nur, was in ihm gespeichert werden kann, nicht die Art von was zurückgegeben wird, wenn Sie etwas von ihm abrufen. Standardmäßig ist alles, was von PDO zurückgegeben wird, eine Zeichenkette, PHP jongliert jedoch, also '$ var = 10;' und '$ var =" 10 ";' (eine Ganzzahl und eine Zeichenkette, die beide 10 zugeordnet sind) als Zahlen behandelt. – Qirel

Antwort

0

Mit PDO the underlying C API gibt a structure of strings beim Aufruf mysql_fetch_row() zurück. Da PHP eine lose typisierte Sprache ist, die automatisch nach Bedarf in Ganzzahl umwandelt, vermute ich, dass die PDO-Entwickler sie so zurückgegeben haben, wie sie sind. Dies wäre schneller, als nach jedem Spaltentyp zu suchen und ihn dynamisch in eine Ganzzahl/Gleitkommazahl umzuwandeln.

Speziell in Bezug auf Float kann ein nativer PHP-Gleitkommawert von dem ursprünglichen gespeicherten Wert abweichen, wenn er aus einer Zeichenfolge konvertiert wird. Zum Beispiel unterstützen MySQL-Spalten eine Genauigkeit, während PHP nicht schwebt. Wenn Sie Floats als String aus der Datenbank belassen, können Sie mehr steuern (z. B. a library mit anderer Genauigkeit verwenden).

+0

gibt es auch eine vorbereitete Aussage –

0

weil PDO selbst es nicht unterstützt (oder hat es vorher nicht unterstützt)?

Ziemlich viel ja, aber für mydsql ist es nicht, weil PDO sondern weil mysql C API.

Da es changed, für den Moment PDO can return correct datatypes, wenn Sie führen eine nativen vorbereitete Anweisung gegen eine mysqlnd -basierte PDO Instanz.