Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit SELECT-Abfrage bei MySQL
Christian Korff
08-12-2003, 19:41
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?
Berufspenner
08-12-2003, 20:01
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
WHERE username="root" versucht.
Cu
André
Christian Korff
08-12-2003, 20:35
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'))
Berufspenner
08-12-2003, 20:51
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é
Christoph
09-12-2003, 08:47
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".
Christian Korff
09-12-2003, 09:08
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?
Christoph
09-12-2003, 12:54
NULL Werte werden mit IS NULL abgefragt.
Vielleicht ist es sinnvoll, wenn Du Dir ein Buch zum Thema Datenbanken und SQL zulegst?
Berufspenner
09-12-2003, 16:27
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é
wie waers wennde mal wie bereits empfohlen die spaltennamen nicht in anfuehrungszeichen schreibst... so hier....
SELECT *
FROM foobar_users
WHERE username = 'root' AND (
(
password = 'd41d8cd98f00b204e9800998ecf8427e'
) OR (
password = NULL AND only_ip = '192.168.1.202'
)
)
das sollte klappen
Original geschrieben von ohcibi
password = NULL
besser ist
password is NULL
s. Beitrag von Christoph
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.