PHP-Datentyp bei PDOStatement::fetchAll

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

  • PHP-Datentyp bei PDOStatement::fetchAll

    Hallo,

    ich habe ein kleines Problem bezüglich PDO:

    Bei Abfrage einer Ergebnismenge mit PDOStatement::fetchAll() enthält das resultierende Array alle Werte als Strings, auch wenn die entsprechenden Spalten in der DB denTyp INTEGER haben. Gibt es eine Möglichkeit, einen PHP-Datentyp an eine Ergebnisspalte zu binden, ähnlich wie bindColumn() (was ja aber auch eine Variable an die Spalte bindet)? Die Doku ist da leider etwas dürftig.

    Vielen Dank im vorraus.

  • #2
    Nein, das ist Afaik nicht möglich (der Treiber müsste ja bei der Abfrage Informationen über die Tabelle haben um dann entsprechende PHP Werte übergeben zu können). Du musst entweder alle Werte durchlaufen und mit is_int prüfen oder du versucht ein Objekt mit __set zu erstellen und es dann über PDO :: FETCH_INTO zu befüllen und bei jeder Variable gleich zu prüfen ob das ein Integer vorliegt. Oder du ließt vorher die Spaltentypen aus und castest die Ergebnisse dann.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Alle Werte mit is_int() durchlaufen bringt ja nichts, da eben alles Strings sind. Ich weiß auch, welche Spalten INT-Spalten sind und das möchte ich dem Treiber ja gerade mitteilen, damit der mir dafür auch INT-Werte liefert. Als Alternative könnte man die INT-Spalten mit bindColumn() an eine Variable binden und das Ergebnis mit einer fetch()-Schleife durchlaufen und jede Zeile da wieder als Array ablegen. Find ich aber irgendwie blöd und langsam.

      Kommentar


      • #4
        Alle Werte mit is_int() durchlaufen bringt ja nichts, da eben alles Strings sind.
        Quatsch. Nicht wenn du is_numeric benutzt.
        PHP-Code:
         foreach ( $data as $key => $value ) {
        is_numeric $value ); // is_numeric ( "1" ) = true
        // oder wenn du die Felder sowieso kennst
        if ( !empty ( $intFields $key ] ) {
        (int) 
        $value;
        }

        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          Werde jetzt alle Zeilen in einer Schleife durchlaufen... Da hat PDO meines Erachtens einen Designfehler. Trotzdem Danke für die Antworten.

          Kommentar

          Lädt...
          X