Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Vergleichsoperator "=" funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • MySQL Vergleichsoperator "=" funktioniert nicht

    Hallo MySQL-Experten,
    ich probiere schon seit Stunden, eine ganz einfache Datumsabfrage zu realisieren. Aber es ist wie verhext, der Vergleichsoperator "=" scheint einfach nicht zu funktionieren.
    Hier ist mein Code:
    PHP-Code:
    $db mysqli_connect("localhost""user""passwort""db_name");
    if(!
    $db)
    {exit(
    "Verbindungsfehler: ".mysqli_connect_error());}
    $ergebnis mysqli_query($db"SELECT id, name, sqlgeburtsdatum FROM Tabelle WHERE sqlgeburtsdatum = '1964-02-15'");
    while(
    $row mysqli_fetch_object($ergebnis))
    {echo 
    $row->sqlgeburtsdatum;} 
    Obwohl es für dieses Datum genügend Einträge gibt, werden einfach keine Ergebnisse ausgeworfen. Wenn ich den Operator jedoch auf < oder > oder != ändere, funktioniert die Abfrage!
    Hat jemand eine Idee, warum das Gleichheitszeichen oder LIKE nicht funktionieren?

    Vielen Dank für Eure Antworten
    Andreas

  • #2
    Zitat von Andreas2012 Beitrag anzeigen
    Hat jemand eine Idee, warum das Gleichheitszeichen oder LIKE nicht funktionieren?

    Vielen Dank für Eure Antworten
    Andreas
    Datentypen?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Sorry,
      id = Typ 'smallint(6)', name = 'varchar(100)' und sqlgeburtsdatum = 'date'.

      Kommentar


      • #4
        Ach so, und in phpMyAdmin ist unter Struktur bei 'date' als einziges Feld noch Standard = NULL angegeben, und bei Null weiter unten ist ein Häkchen. Sonst sind dort keine Angaben gemacht.

        Kommentar


        • #5
          Zitat von Andreas2012 Beitrag anzeigen
          Ach so, und in phpMyAdmin ist unter Struktur bei 'date' als einziges Feld noch Standard = NULL angegeben, und bei Null weiter unten ist ein Häkchen. Sonst sind dort keine Angaben gemacht.
          Dann scheint wohl was kapott zu sein:

          Code:
          test=*# select '1964-02-15'::date = '1964-02-15';
           ?column?
          ----------
           t
          (1 row)
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Hallo akretschmer, vielen Dank für deine Mühe. Könntest du mir deinen Code etwas erläutern, bin leider ziemlicher Anfänger

            Kommentar


            • #7
              Zitat von Andreas2012 Beitrag anzeigen
              Hallo akretschmer, vielen Dank für deine Mühe. Könntest du mir deinen Code etwas erläutern, bin leider ziemlicher Anfänger
              Er vergleicht das Datum mit einem String, der zum Vergleich nach DATE gecastet wird.

              Code:
              test=*# select '1964-02-15'::date = '1964-02-15'::date;
               ?column?
              ----------
               t
              (1 row)
              
              Time: 0,219 ms
              test=*# select '1964-02-15'::date = '1964-02-15 ';
               ?column?
              ----------
               t
              (1 row)
              
              Time: 0,169 ms
              test=*# select '1964-02-15'::date = ' 1964-02-15 ';
               ?column?
              ----------
               t
              (1 row)
              
              Time: 0,179 ms
              test=*# select '1964-02-15'::date = ' 1964-02-15 x';
              ERROR:  invalid input syntax for type date: " 1964-02-15 x"
              LINE 1: select '1964-02-15'::date = ' 1964-02-15 x';
                                                  ^
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Oh mann, ich verstehe nur Bahnhof
                Muss ich die oberste Zeile so in php einfügen und dann ausgeben?

                Kommentar


                • #9
                  Zitat von Andreas2012 Beitrag anzeigen
                  Oh mann, ich verstehe nur Bahnhof
                  Muss ich die oberste Zeile so in php einfügen und dann ausgeben?
                  Nein.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Ist letztlich ja auch egal:
                    Code:
                    mysql> CREATE TABLE IF NOT EXISTS `andreas` (
                        -> `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
                        ->   `name` varchar(100) NOT NULL,
                        ->   `sqlgeburtsdatum` date NOT NULL
                        -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                    Query OK, 0 rows affected (0.01 sec)
                    
                    mysql> INSERT INTO `andreas` (`name`,`sqlgeburtsdatum`) VALUES ("Hans", "1964-02-15"), ("Klaus", "1966-05-06");
                    Query OK, 2 rows affected (0.00 sec)
                    Records: 2  Duplicates: 0  Warnings: 0
                    
                    mysql> SELECT id, name, sqlgeburtsdatum FROM `andreas` WHERE sqlgeburtsdatum = '1964-02-15';
                    +----+------+-----------------+
                    | id | name | sqlgeburtsdatum |
                    +----+------+-----------------+
                    |  1 | Hans | 1964-02-15      |
                    +----+------+-----------------+
                    1 row in set (0.00 sec)
                    Version ist MySQL 5.5.40, bezweifle aber das "=" bei irgendeiner Version nicht funktioniert...Vermutlich liegt dein Fehler irgendwo anders. Wird der Query überhaupt fehlerfrei ausgeführt?

                    Kommentar


                    • #11
                      Hallo Tropi, danke für deine Antwort.

                      Habe gerade folgendes herausgefunden:

                      Ich habe testweise eine neue Spalte 'testdatum" in die Tabelle eingefügt, gleicher Typ und Attribute wie 'sqlgeburtsdatum'. Wenn ich dort nun einen neuen Wert 1964-02-15 eintrage, dann wird dieser Datensatz anschließend problemlos gefunden!!!
                      Heißt das, dass die vorhandenen Einträge in 'sqlgeburtsdatum' irgendwie defekt sind? Wenn ja, wie kann das sein? Ich habe die Tabelle in phpmyadmin analysieren lassen, alles scheint ok.

                      Kommentar


                      • #12
                        Lass dir doch mal die komplette Spalte 'sqlgeburtsdatum' ausgeben. Was passiert wenn du die Werte 1:1 in die neue Spalte übernimmst? Also z.B. "UPDATE tabelle SET testdatum = sqlgeburtsdatum"

                        Kommentar


                        • #13
                          Genau das habe ich gerade gemacht, 1:1 kopiert. Er findet wieder keine Daten. Sobald ich von Hand etwas neu eingebe, scheint es ohne Probleme zu funktionieren.

                          Kommentar


                          • #14
                            Das Problem brauche ich gar nicht in php auszutesten, auch in phpmyAdmin ist es offensichtlich: wenn ich in der alten Spalte nach einem Datum suchen lasse mit dem Operator "=", wird nichts gefunden. Wenn ich in der neuen Spalte nach den frisch eingegebenen suche, funktioniert es...

                            Das ganze scheint irgend ein Speicherproblem zu sein, oder? Habt ihr so etwas schon mal gehört?

                            Kommentar


                            • #15
                              Hallöchen,

                              Zitat von Andreas2012 Beitrag anzeigen
                              Das ganze scheint irgend ein Speicherproblem zu sein, oder? Habt ihr so etwas schon mal gehört?
                              Viel eher vermute ich ein Layer 8 Problem.

                              Viele Grüße,
                              lotti
                              [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                              Kommentar

                              Lädt...
                              X