PDA

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é

ohcibi
09-12-2003, 19:18
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

elrond
10-12-2003, 06:54
Original geschrieben von ohcibi

password = NULL


besser ist

password is NULL

s. Beitrag von Christoph