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
Antwort
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).
gibt es auch eine vorbereitete Aussage –
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.
- 1. PDO Automatisches Aliasing beim Abrufen?
- 2. PDO und MySQL Volltextsuche
- 3. PHP Mysql PDO abrufen Datensätze nach Datumsbereich
- 4. PHP PDO sqlsrv kann nicht dynamische Bibliothek
- 5. PDO und MySQL 'zwischen'
- 6. PDO, AES_ENCRYPT und MySQL
- 7. PDO MySQL: Verwenden Sie PDO :: ATTR_EMULATE_PREPARES oder nicht?
- 8. PHP PDO sqlsrv Undefinierte Klassenkonstante SQLSRV_ENCODING_UTF8
- 9. wie Parameter in sqlsrv ohne Verwendung von PDO zu binden
- 10. PDO mit FETCH_CLASS holen gibt false zurück
- 11. PHP PDO MySQL Array gibt nur Spaltennamen zurück
- 12. PHP5 MySql und PDO Ausnahme
- 13. MySQL & PDO: über Effizienz
- 14. PDO, mysql, Transaktionen und Tabellenverriegelung
- 15. echte Escapesequenz und PDO
- 16. PDO-Anweisung gibt kein vollständiges Array zurück
- 17. PDO MYSQL Frage
- 18. Konvertierung von mysql nach PDO
- 19. mysql pdo transaction und session storage
- 20. PDO PHP & MySQL FOUND_ROWS() gibt immer 0
- 21. mysql PDO wie LIKE
- 22. PDO + MySQL und gebrochen UTF-8 Codierung
- 23. Abfragebefehl von PDO abrufen vorbereitete Anweisung
- 24. Ich kann keine Daten abrufen, mysql php pdo
- 25. Aktuellen PDO-Treiber von bestehender Verbindung abrufen?
- 26. PDO Prepared Statement und hinzufügen
- 27. Wie zu beheben PDO sqlsrv Verbindungstimeout in Laravel?
- 28. Baumknoten MySQL zu PDO-Anweisung
- 29. pdo fangen und Ausgabe mysql Fehler
- 30. PHP7/mysql PDO benutzerdefinierte Funktion
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