Nach update der XAMPP-Version funkt. alter code nicht richti

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Nach update der XAMPP-Version funkt. alter code nicht richti

Postby Dignified » 03. January 2005 12:33

Hallo erst mal,
bin gerade neu hier und hoffe das mir jemand weiterhelfen kann.

Ich habe mich auf Weihnachten selbst beschenkt und mir einen Laptop für die FH zugelegt, damit die Projektarbeit ein wenig vereinfacht wird, von wegen Datenmanagement und so ;).

Nach dem ich den Laptop sauber installiert hatte fehlte mir nurnoch XAMPP und ich hab mir bei der Gelegenheit natürlich gleich die neuste Version gezogen und installiert.

Jetzt nurnoch die Projektdateien aus dem alten htdocs ins neue, Datenbank über phpmyadmin einbinden und gut.

Browser auf ... Localhost/"Projektname".... und alles läuft wunderbar... bis auf eine einzige Funktion.....:(

Ich habe eine Suche geschrieben, die mir nach bestimmten Kriterien Einträge aus der Datenbank holt. Dabei habe ich auch zwei Kriterien "Datum von" und "Datum bis" ... die MYSQL-Abfrage baue ich mir wie folgt

Code: Select all
if(isset($_POST['stichwort']) || isset($_POST['benutzer']) || isset($_POST['system']) || isset($_POST['datum'])){
       
        if(isset($_POST['stichwort']) && $_POST['stichwort'] != ""){
            $Where_Stichwort = "AND Bemerkungen like '%".$_POST['stichwort']."%'
                                          OR Kurzbeschreibung like '%".$_POST['stichwort']."%'";

        }
        else{
              $Where_Stichwort = "";
        }
                 
        if(isset($_POST['benutzer']) && $_POST['benutzer'] != 0){
            $Where_Mitarbeiter_id = "AND Mitarbeiter_ID = ".$_POST['benutzer'];
        }
        else{
              $Where_Mitarbeiter_id = "";
        }
       
        if(isset($_POST['system']) && $_POST['system'] != 0){
            $Where_System_id = "AND System_ID = ".$_POST['system'];
        }
        else{
              $Where_System_id = "";
        }
       
        if(isset($_POST['datum']) && $_POST['datum'] !='%-%-% %' ){
            $Where_Datum = "AND Datum >='''".$_POST['datum']."'''";
        }
        else{
              $Where_Datum = "";
        }
       
        if(isset($_POST['datum_bis']) && $_POST['datum_bis'] !='%-%-% %' ){
            $Where_Datum_bis = "AND Datum <='''".$_POST['datum_bis']."'''";
        }
        else{
              $Where_Datum_bis = "";
        }
       
        $search_query  = mysql_query("SELECT
                             *
                         FROM
                             ".$_TAB['changes']."
                         WHERE
                      id >= 0
                     ".$Where_Mitarbeiter_id."
              ".$Where_System_id."
                     ".$Where_Stichwort."
                     ".$Where_Datum." ".$Where_Datum_bis."
                                      
          ");


Bitte nicht gleich um die Ohren hauen... bin blutiger Anfänger ;)
zumindest hat der Code auf allen Systemen und Browsern die ich so getestet habe bisher funktioniert.
Probleme gibt es auch nur mit der Datumabfrage... alles andere funtkioniert einwandfrei.
Deshalb tippe ich auf eine Änderung in der neuen MYSQL- Version, die beim Datum einen Fehler produziert... wahrscheinlich sind es die %-%.. Abfragen oder? Wenn ja wie geht es denn richtig?

Vielen Dank schnomal im Vorraus
Dignified
 
Posts: 3
Joined: 03. January 2005 12:10

Postby Wiedmann » 03. January 2005 12:38

Deshalb tippe ich auf eine Änderung in der neuen MYSQL- Version, die beim Datum einen Fehler produziert

Was passierte vorher, und was passiert jetzt?

wahrscheinlich sind es die %-%.. Abfragen oder? Wenn ja wie geht es denn richtig?

Was für einen Spaltentyp haben diese Felder?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Dignified » 03. January 2005 12:57

Danke für die superschnelle Antwort :)

vorher konnte ich entweder nur Datum_von eingeben (im Code heist das nur Datum) => und er zeigte mir alle Datensätze von diesem Datum an..
oder nur Datum_bis => und er zeigte mir alle Datensätze bis zu diesem Datum an...
oder beide zusammen => und er zeigte mir alle Datensätze zwischen den Daten an.
Jetzt passiert entweder garnichts (Where Klausel_variable des Datums bleibt leer) oder er findet keine Datensätze ...:(

Der Spaltentyp des Datum Feldes ist das MYSQL Date-format mit Zeit

Ich kann mich wage daran errinnern, das ein Dozent mal erwähnte das sich MYSQL bei den %...%... Strukturen seltsam verhält. Aber in diesem Fall tritt das Problem ja erst bei der neuen Version auf. (Vielleicht Änderungen in MYSQL was das Handling in solchen Fällen angeht?)
Dignified
 
Posts: 3
Joined: 03. January 2005 12:10

Postby Wiedmann » 03. January 2005 13:53

Der Spaltentyp des Datum Feldes ist das MYSQL Date-format mit Zeit

Also ist der Spaltentyp VARCHAR oder TEXT wo du einen formatierten Datumstring reinschreibst?

Da würde sich doch eigentlich eher der Spaltentyp DATE oder TIMESTAMP empfehlen. Für die Berechnung der Zeitdifferenz/vor Datum/nach Datum bietet MySQL ja dann spezielle Funktionen an (Solche Felder kann man auch direkt im korrektem Format vergleichen). Bei der Behandlung von TIMESTAMP-Spalten hat sich allerdings was geändert zwischen 4.0 und 4.1)

das sich MYSQL bei den %...%... Strukturen seltsam verhält.

Suchmuster ("%") benutzt man eigentlich auch nur bei Stringvergleiche mit einer Funktion wie LIKE oder REGEXP. (Bei einfachen, logischen, Vergleichen, ist das Ergebnis wohl wirklich eher spekulativ da nicht vorgesehen).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Dignified » 03. January 2005 14:22

So... also der Spaltentyp ist 'DATETIME' .. aber in der Suche vergleiche ich nur das vom Benutzer eingegebene Datum mit dem Wert aus der Spalte.

Ich habe ein wenig rumprobiert, und es scheint so, das das Problem darin liegt, das der Vergleich
Code: Select all

AND Datum >='''".$_POST['datum']."'''


bzw.
Code: Select all

AND Datum <='''".$_POST['datum_bis']."'''



nicht mehr funktioniert.

das %-%.. Konstrukt stellt nur die Abfrage da, ob der Benutzer auch das Komplette Datum eingegeben hat (Mehrere Auswahlfelder tag,Monat,Jahr..)

Ich werde wohl mal nach ein paar Datumsfunkitonen in mysql suchen ;)...
Dignified
 
Posts: 3
Joined: 03. January 2005 12:10


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 2 guests