Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Datentp PDO::fetch MySQL/MariaDB

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Datentp PDO::fetch MySQL/MariaDB

    Hi,
    habe hier einen merkwürdigen Effekt bei der Abfrage von Werten mit dem Datentyp INT und DOUBLE. Wenn ich mit
    PHP-Code:
    PDO::ATTR_EMULATE_PREPARES => true,  //Defaulteinstellung 
    arbeite erhalte ich immer alle Werte als String.

    PHP-Code:
    array ( 'Anzahl' => '1025''MaxFloat' => '1024', ) 
    Setze ich jedoch

    PHP-Code:
    PDO::ATTR_EMULATE_PREPARES => false
    ist der Datentyp der Elemente im Array Integer bzw. Float.

    PHP-Code:
    array ( 'Anzahl' => 1025'MaxFloat' => 1024.0, ) 
    Dieses Verhalten tritt auf 2 Systemen mit unterschiedlichen PHP/MySQL-Versionen auf.
    Auf einen 3.System mit einer MariaDB erhalte ich immer Strings.

    Kennt einer der DB-Profis eine Datenbankeinstellung für MySQL mit der ich immer Strings erhalte oder muss ich dies mit PHP abfangen?

    Edit: Lösung soeben gefunden. Mit der PDO-Einstellung:
    PHP-Code:
    PDO::ATTR_STRINGIFY_FETCHES => true
    erhalte ich immer Strings.
    jspit.de


  • #2
    Dieses Verhalten tritt auf 2 Systemen mit unterschiedlichen PHP/MySQL-Versionen auf.
    Auf einen 3.System mit einer MariaDB erhalte ich immer Strings.
    Das heisst dann wohl, das der PDO Treiber für MariaDB keine (oder nur limitierten) nativen support für prepared statements besitzt (sofern ich die Hilfetexte richtig verstanden hab).

    Da es keinen eigenen PDO Treiber für MariaDB gibt, wird der MySQL Treiber benutzt.

    MariaDB and MySQL are 100% 99% compatible.
    http://stackoverflow.com/questions/1...do-and-mariadb

    Explizit hab ich nichts zu dem Thema gefunden.. alles reine Spekulation.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Nein, das bedeutet nur das mit der MariaDB eben nur Strings kommen. Mit diesen Einstellungen
      PHP-Code:
        PDO::ATTR_STRINGIFY_FETCHES => false,
        
      PDO::ATTR_EMULATE_PREPARES => false,
        
      PDO::ATTR_CASE => PDO::CASE_NATURAL
      soll nach diesen Beitrag PDO für MySQL-DB bei numerischen Datenbankspalten auch numerische Werte in PHP liefern. Das tut es auf dem System mit der MariaDB nicht. Warum auch immer.
      Hier ist ein Skript zu finden, welcher im Emulationsmodus (PDO::ATTR_EMULATE_PREPARES => true,) funktioniert, nativ (PDO::ATTR_EMULATE_PREPARES => false) aber einen Fehler wirft.
      Das konnte ich mit der MariaDB nachvollziehen und gehe daher davon aus, das PDO für MariaDB genau wie für MySQL einen nativen Support für prepared Statements besitzt.
      jspit.de

      Kommentar

      Lädt...
      X