Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Problem mit SELECT-Abfrage bei MySQL

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Beiträge
    21

    Problem mit SELECT-Abfrage bei MySQL

    Hallo. Ich hab irgendwie ein absolutes Problem mit einer MySQL-Abfrage.

    Mein Syntac lautet z.Z.
    SELECT * FROM foobar_users WHERE 'username'='root' AND ('password'='d41d8cd98f00b204e9800998ecf8427e' OR ('password'=NULL AND 'only_ip'='192.168.1.202'))

    Das ganze liefert mir 0 Resultate zurück.
    phpMyAdmin zeigt mir wenn ich mir das erklären lasse "Impossible WHERE" an.

    Es gibt in der Tabelle aber einen Datensatz in dem das Feld "password" NULL ist, das Feld "username" "root" ist und "only_ip" "192.168.1.202" ist.

    Der Export des entsprechenden Datzensatz der aber nicht gefunden wird sieht so aus:
    INSERT INTO `imagepointer_users` (`foo`, `bar`, `username`, `password`, `comments`, `only_ip`) VALUES (4, 1, 'root', NULL, 'readwrite', '192.168.1.202');

    Kann mir das jemand erklären was ich da falsch mache?

  2. #2
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Das ganze liefert mir 0 Resultate zurück.
    phpMyAdmin zeigt mir wenn ich mir das erklären lasse "Impossible WHERE" an.
    Hast du es mal mit
    Code:
    WHERE username="root"
    versucht.

    Cu
    André
    C und C++

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Beiträge
    21
    also nachdem ich ein wenig rumkorregiert habe funktioniert dies einwandfrei.
    Aber die ganze Query ist noch immer irgendwie nicht korrekt

    SELECT * FROM `foobar_users` WHERE `username`='root' AND (`password`='d41d8cd98f00b204e9800998ecf8427e' OR (`password`=NULL AND `only_ip`='192.168.1.202'))

  4. #4
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Hi@all

    Es sei noch gesagt, dass du Spaltennamen nicht in Anführungszeichen setzen brauchst/drafst, da diese sonst als Zellen-/Spalten-/Zeilenwerte oder als etwas anderes interpretiert werden könnten und dann zu Fehlern führen können/werden.

    Cu
    André
    C und C++

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    Code:
    WHERE username="root"
    Das ist fehlerhaftes SQL!

    Doppelte Anführungszeichen sind für Identifier (Tabellennamen, Spaltennamen, ...). Für Attributwerte sind laut SQL2 EINFACHE Anführungszeichen zu nehmen.

    Dass das in MySQL fehlerhaft implementiert ist, beduetet nicht, dass es eine gute Idee ist diese fehlerhafte Implementierung zu "nutzen".

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.01.2003
    Beiträge
    21
    Also irgendwie funktioniert noch immer was nicht.

    Zudem ne Frage: Wie muss ich nun die Spaltennamen und Spaltenwerte schreiben?


    Ich habe mit phpMyAdmin nochmal rumexperiementier:
    SELECT *
    FROM `foobar_users`
    WHERE `username` = 'root' AND (
    (
    `password` = 'd41d8cd98f00b204e9800998ecf8427e'
    ) OR (
    `password` = NULL AND `only_ip` = '192.168.1.202'
    )
    )

    funktioniert nicht. Aber wenn ich das `password`=NULL wegnehme funktioniert es.

    Hat jemand ne Idee?

  7. #7
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    NULL Werte werden mit IS NULL abgefragt.
    Vielleicht ist es sinnvoll, wenn Du Dir ein Buch zum Thema Datenbanken und SQL zulegst?

  8. #8
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Original geschrieben von Christoph
    Das ist fehlerhaftes SQL!

    Doppelte Anführungszeichen sind für Identifier (Tabellennamen, Spaltennamen, ...). Für Attributwerte sind laut SQL2 EINFACHE Anführungszeichen zu nehmen.

    Dass das in MySQL fehlerhaft implementiert ist, beduetet nicht, dass es eine gute Idee ist diese fehlerhafte Implementierung zu "nutzen".
    Ja, sorry. Da ist der Fehlerteufel dran schuld

    Cu
    André
    C und C++

  9. #9
    Registrierter Benutzer
    Registriert seit
    06.11.2003
    Ort
    sessel vor dem pc
    Beiträge
    66
    wie waers wennde mal wie bereits empfohlen die spaltennamen nicht in anfuehrungszeichen schreibst... so hier....
    Code:
    SELECT * 
    FROM foobar_users 
    WHERE username = 'root' AND ( 
    ( 
    password = 'd41d8cd98f00b204e9800998ecf8427e' 
    ) OR ( 
    password = NULL AND only_ip = '192.168.1.202' 
    ) 
    )
    das sollte klappen

  10. #10
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    Original geschrieben von ohcibi

    password = NULL
    besser ist
    PHP-Code:
    password is NULL 
    s. Beitrag von Christoph
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •