Baba: SQLite 3 - Daten als INTEGER erhalten

Hallo,
in ein als INTEGER deklariertes Feld, trage ich Integers ein. Wenn ich die allerdings mit fetchAll() wieder abfrage, erhalte ich stets Strings.

Insert query: ausgegeben mit var_dump()

string 'INSERT INTO runlist (run_id, session_id, time_create, flag, flag_info, sorting) VALUES('md5_1341231042', 'jv5nvc78tq5mjc06lp434sr3n4', 1341231042, 'open', '0', 103)' (length=172)

So wie ich das sehe, habe ich die nötigen Maßnahmen getroffen (durch weglassen der '), dass time_create und sorting als Integers rein müssten. Ich habe gelesen, dass SQLite gütig ist, was die Datentypen angeht, aber das heisst ja nicht, dass korrekt gegebene Integers nicht als Integer gespeichert werden müssten?!

Also liegt der Fehler vielleicht im fetchen?

Select query: ausgegeben mit var_dump();

string 'SELECT * FROM runlist WHERE run_id='md5_1341230078'' (length=51)

Dieser Query wird so ausgeführt:

if($statement = $this->prepare($query)){  
  
      $statement->setFetchMode(PDO::FETCH_ASSOC);  
      $statement->execute();  
  
      $records = $statement->fetchAll();  
      d($records);  
  
}

Das gibt:

array  
  0 =>  
    array  
      'run_id' => string 'md5_1341230078' (length=14)  
      'session_id' => string 'jv5nvc78tq5mjc06lp434sr3n4' (length=26)  
      'time_create' => string '1341230078' (length=10)  
      'time_edit' => null  
      'flag' => string 'notqualified' (length=12)  
      'flag_info' => string '0' (length=1)  
      'sorting' => string '103' (length=3)  

Ich möchte einfach nur wissen, ob ich etwas falsch mache, oder nicht. Ich weiß ja, dass ich auch so Werte zum B. inkrementieren kann, da php eine automatische Typumwandlung vornimmt. Ist vielleicht aber nicht das Schönste. Woran liegt es, dass da nur Strings rauskommen?

Achja, time_create und sorting sind definitiv als INTEGER deklariert. Sieht man auch im SQLite Manager von Mozilla, an andersfarbigen Zellen.

Liebe Grüße und danke für Antworten.

Baba

  1. Hallo,

    in ein als INTEGER deklariertes Feld, trage ich Integers ein. Wenn ich die allerdings mit fetchAll() wieder abfrage, erhalte ich stets Strings.
    Also liegt der Fehler vielleicht im fetchen?

    soweit ich es nachvollzogen habe, liegt es an den fetch- bzw. fetchAll-Methoden von PDO [*].

    $meta = $statement->[link:http://www.php.net/manual/de/pdostatement.getcolumnmeta.php@title=getColumnMeta]($spaltennr);  
    var_dump($meta);
    

    zeigt Dir, dass der Datentyp der Spalte sehr wohl richtig erkannt wurde, aber fetchAll liefert einfach stumpf Strings.

    Die Verwendung von SQLite3 statt PDO hilft oder halt in PDO das Binden der Spalten an Variablen mit Angabe des Spaltentyps über bindColumn. Was nichts dran ändert, dass Du im zweiten Fall fetchAll nicht verwenden kannst.

    Freundliche Grüße

    Vinzenz

    1. Vielen Dank. Ich werde wohl zunächst mal eine Typumwandlung mittels intval() vornehmen. Das kann ich sogar innerhalb des Abstraktionslayser einbauen, den ich als php-Klasse geschrieben habe.

      Vielen Dank für die hilfreiche Anwort.

      Cheers, Baba