Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP/PDO Datum/Zeit Feld Abfrage in Access Datenbank via ODBC

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PHP/PDO Datum/Zeit Feld Abfrage in Access Datenbank via ODBC

    Hallo Jungs

    Ich hab da ein echt komisches Problem, mein Beispielcode:

    PHP-Code:
    <?PHP
    include('../system/classes/classes.php');
    $db = new db_odbc();
    $sql "Select Rechnungsdatum from T_Auftrag";
    $res $db->con->query($sql);
    foreach(
    $res as $result){
        echo 
    "Datum: ".$result['Rechnungsdatum']."<br>";
    }
    ?>
    Damit erhalte ich folgendes:

    Datum: 1996-04-13 00:00:00
    Wenn ich nun eine Where Bedingung verwenden will wie folgt:

    PHP-Code:
    <?PHP
    include('../system/classes/classes.php');
    $db = new db_odbc();
    $sql "Select Rechnungsdatum from T_Auftrag WHERE Rechnungsdatum > 2010-01-01 00:00:00";
    $res $db->con->query($sql);
    foreach(
    $res as $result){
        echo 
    "Datum: ".$result['Rechnungsdatum']."<br>";
    }
    ?>
    Erhalte ich folgenden Fehler:
    Warning: Invalid argument supplied for foreach() in C:\Websites\Systemmanagement\Website\comitis\templ ate\datum.php on line 6
    Lasse ich die 00:00:00 bei dem Query weg, dann bekomm ich zwar die Daten wieder raus aber natürlich nicht nur die neueren als 01.01.2010 sondern wieder alle.

    Escapen mit "" oder '' oder [] oder `` hab ich schon alles probiert. Kriegs einfach nicht hin. Das selbe Problem habe ich wenn in der WHERE Bedingung ein . vorkommt!?!?

    Ich hab echt keine Ahnung was ich noch probieren soll. Im Access handelt es sich um ein Datum/Zeit Feld.

    Verzweifle langsam daran.

    Würde mich über eure Hilfe echt freuen!

    Grüsse

    eXe

  • #2
    also "Escapen" müsstest du wohl ...und zwar deinen gesamten Zeit/Datumswert

    einfacher wird es allerdings, wenn du es über den Unix-Timestamp machst ....


    PHP-Code:
    $sql "Select Rechnungsdatum, (UNIX_TIMESTAMP(Rechnungsdatum)) as time FROM
       T_Auftrag WHERE time > '"
    .mktime  (0,0,0,1,1,2010)."' "
    mktime ( hh,mm,ss, monat, tag, jahr (,sommerzeit))

    Kommentar


    • #3
      Zitat von eagle275 Beitrag anzeigen
      also "Escapen" müsstest du wohl ...und zwar deinen gesamten Zeit/Datumswert

      einfacher wird es allerdings, wenn du es über den Unix-Timestamp machst ....


      PHP-Code:
      $sql "Select Rechnungsdatum, (UNIX_TIMESTAMP(Rechnungsdatum)) as time FROM
         T_Auftrag WHERE time > '"
      .mktime  (0,0,0,1,1,2010)."' "
      mktime ( hh,mm,ss, monat, tag, jahr (,sommerzeit))
      Hey eagle!

      Danke für deine Antwort, scheint aber leider auch nicht zu funktionieren da ich folgendes erhalte:

      Warning: Invalid argument supplied for foreach() in C:\Websites\Systemmanagement\Website\comitis\templ ate\datum.php on line 6
      Scheint also ein Problem mit dem Query zu haben.

      Kommentar


      • #4
        sorry - überlesen, dass es Access ist ... der kennt natürlich nicht alle Funktionen von MySQL ...

        versuch es mal so

        PHP-Code:
        $sql "Select Rechnungsdatum FROM T_Auftrag WHERE 
           Rechnungsdatum > '2010-01-01'  "

        Kommentar


        • #5
          Kommt ebenfalls zum selben Resultat. Die einzige Version die noch ein Rückgabewert liefert ist mit:

          PHP-Code:
          $sql "Select Rechnungsdatum FROM T_Auftrag WHERE Rechnungsdatum > 2010-01-01"
          Aber es kommen alle Resultate, also die Suche greifft nicht.

          Kommentar


          • #6
            Keiner mehr Erfahrungen mit PHP->MS Access? Ich finde im Internet nichts dass dieses Problem umschreiben würde.

            Kommentar


            • #7
              kennst du google findest du (unter vielem anderen) : http://support.microsoft.com/kb/210276

              Problem ist .. die interne Speicherung erfolgt bei Access als Double-Zahl .. vor dem Komma das Datum, der Nachkommaanteil enthält die Zeit ...
              Double Int() entspricht Nachkomma
              1.0 1 December 31, 1899 .0 12:00:00 AM
              2.5 2 January 01, 1900 .5 12:00:00 PM

              Umrechnen kannst du mit CDbl(#5/18/1999 14:00:00#) [ = 36298.5833333333 ]
              ACHTUNG - abweichend zu Deutsch / Internationalem Datum Monat/Tag/Jahr




              $sql = "Select Rechnungsdatum FROM T_Auftrag WHERE Rechnungsdatum > CDbl(#01/01/2010 00:00:00#) ";

              wäre also mal nen Versuch wert..

              Kommentar


              • #8
                Zitat von eagle275 Beitrag anzeigen
                CDbl(#5/18/1999 14:00:00#)
                Vielen vielen Dank eagle! Damit klappts wunderbar.

                Grüsse

                eXe

                P.S.: Hätte wohl eher Grundlagenforschung betreiben sollen als nach dem Fehler zu suchen.

                Kommentar

                Lädt...
                X