Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Dummer SQL Fehler!? (https://www.delphipraxis.net/67122-dummer-sql-fehler.html)

Plague 9. Apr 2006 22:30


Dummer SQL Fehler!?
 
Hallo,

ich habe ein Problem mit folgenem SQL Code.
SQL-Code:
SELECT *  FROM `user` WHERE `User` = 'Benutzer' AND `Passwort` = password('passw')
Kann mir jemand sagen warum das nicht klappt?
Es kommt kein Fehler, aber auch kein Ergebnis obwohl es ein Ergebnis geben müsste!

Gruß
Thomas

omata 9. Apr 2006 22:58

Re: Dummer SQL Fehler!?
 
Hallo Thomas,

reduziere doch mal deine Einschränkungen und schau welche deiner Ausdrücke nicht wahr wird.
Irgendwo ist das was du dir denkst und das was das System macht unterschiedlich.
Meist sitzt der Fehler aber vor dem Gerät.
Also wie so oft: Fehlersuche!

MfG

Thorsten

mkinzler 10. Apr 2006 05:44

Re: Dummer SQL Fehler!?
 
Da du nicht angegeben hat, welche Datenbank du verwendest ist es schwer dir zu helfen aber versuch mal die Quotes um den Tabelle- und Feldname wegzulassen:

SQL-Code:
SELECT *  FROM user WHERE User = 'Benutzer' AND Passwort = password('passw')

alzaimar 10. Apr 2006 06:38

Re: Dummer SQL Fehler!?
 
Na, ja, wie seht ihr das:
SQL-Code:
'User' = 'Benutzer'
war noch nie wahr, denn diese beiden Strings sind nunmal nur semantisch äquivalent, aber vom ersten bis zum letzten Buchstaben unterschiedlich. :zwinker: .

In SQL werden Felder und Tabellen, mit '[]' eingefasst, wenn man Konflikte mit reservierten Wörten vermeiden will. Es sollte also so laufen:
SQL-Code:
Select * from [user] where [user]='Benutzer' and [Password]=Password('passw')
Grundsätzlich würde ich Feldnamen mit einem Prefix versehen, der für alle Tabellen unterschiedlich ist. Foreign Keys erhalten den Prefix der Fremdtabelle, damit sind 'Natural Joins' möglich, die vielleicht doch irgendwann im SQL Standard implementiert sind.

Mit Prefixen wäre die Abfrage eindeutig:
SQL-Code:
Select * from User Where usUser='Benutzer' and usPassword = Passw('passw')
Das Beste zum Schluss: Stimmt es, das die Hashfunktion im Server installiert ist? Dann muss ich ja nur einen SQL-Monitor auf den Server setzen und schon hab ich alle Passwörter! Implementiere die Hashfunktion lieber in einer Mittelschicht, sodaß ein potentieller Angreifer nur sowas sieht;
SQL-Code:
Select * from User Where usUser='Benutzer' and usPassword = 'F234SDFGs789HJKHJ'
Damit kann er dann nicht allzuviel anfangen.

r_kerber 10. Apr 2006 07:16

Re: Dummer SQL Fehler!?
 
Zitat:

Zitat von alzaimar
Na, ja, wie seht ihr das:
SQL-Code:
'User' = 'Benutzer'
war noch nie wahr

Wenn Du in der Frage von Plague genau hinschaust, findest Du:
Zitat:

Zitat von Plague
SQL-Code:
SELECT *  FROM `user` WHERE `User` = 'Benutzer' AND `Passwort` = password('passw')

Diese "merkwürdigen" schrägen Anführungszeichen umschließen keinen String sondern Feld- und/oder Tabellennamen. Das ist IMHO einen Eigenart von MySQL.
Zur eigentlichen Frage: Steht im Feld User tatsächlich 'Benutzer' oder steht dort z.B. 'Benutzer '? Das wären dann in der Tat verschiedene Strings (analog auch das Feld Passwort überprüfen). Hast Du auf korrekte Groß/Kleinschreibung geachtet? Und probiere es doch mal mit User LIKE 'Benutzer%'.

MaBuSE 10. Apr 2006 08:08

Re: Dummer SQL Fehler!?
 
Zitat:

Zitat von Plague
ich habe ein Problem mit folgenem SQL Code.

Dein Problem hat was mit Datenbanken zu tun, also würde es mehr Sinn machen es auch in die Datenbank Sparte zu posten. Dort müsstest Du auch angeben welche Datenbank Du verwendest, damit wäre das mit den ´xx´ auch klar gewesen.

Ich denke mal das die Lösung auch schon gepostet wurde.

DP-Maintenance 10. Apr 2006 08:54

DP-Maintenance
 
Dieses Thema wurde von "r_kerber" von "Programmieren allgemein" nach "Datenbanken" verschoben.
SQL-Themen gehören in den Bereich Datenbanken. @MaBuSe: Die falsche Sparte hatte ich doch glatt übersehen.

Elvis 10. Apr 2006 09:05

Re: Dummer SQL Fehler!?
 
Zitat:

Zitat von MaBuSE
Dein Problem hat was mit Datenbanken zu tun, also würde es mehr Sinn machen es auch in die Datenbank Sparte zu posten. Dort müsstest Du auch angeben welche Datenbank Du verwendest, damit wäre das mit den ´xx´ auch klar gewesen.

Das beste Mittel gegen diese Art der ignoranten Fragestellung ist: einfach nicht antworten. ;)
Außer vllt. "Schreibe es nochmal richtig unter "Datenbanken" und ich antworte dir auch", o.ä.

MaBuSE 10. Apr 2006 09:25

Re: Dummer SQL Fehler!?
 
Zitat:

Zitat von alzaimar
In SQL werden Felder und Tabellen, mit '[]' eingefasst, wenn man Konflikte mit reservierten Wörten vermeiden will. Es sollte also so laufen:
SQL-Code:
Select * from [user] where [user]='Benutzer' and [Password]=Password('passw')

Das ist schlichtweg falsch.
In SQL werden die Feldnamen nicht mit irgendwas eingefasst!

In einigen "herstellerspezifisch" angepassten SQL Dialekten schon.

Aus diesem Grund muss man ja auch bei der Datenbank Sparte seine verwendete Datenbank angeben.

In Oracle z.B. kannst Du nicht mit [Feldname] arbeiten. Das gibt nur einen Syntaxfehler.
[edit]Der Vollständigkeit halber: In Oracle kann man zur Not "Feldname" verwenden[/edit]

Besser ist es keine Schlüsselwörter zu verwenden und die Feldnamen nicht einzufassen.
Dies kann unter anderem wie Du schon sagtest mit einem Pre- oder Postfix erreicht werden.

Zitat:

Zitat von Elvis
Zitat:

Zitat von MaBuSE
Dein Problem hat was mit Datenbanken zu tun, also würde es mehr Sinn machen es auch in die Datenbank Sparte zu posten. Dort müsstest Du auch angeben welche Datenbank Du verwendest, damit wäre das mit den ´xx´ auch klar gewesen.

Das beste Mittel gegen diese Art der ignoranten Fragestellung ist: einfach nicht antworten. ;)
Außer vllt. "Schreibe es nochmal richtig unter "Datenbanken" und ich antworte dir auch", o.ä.

Ich habe keine Antwort gegeben :mrgreen:
(Das musste ich auch nicht, da die "Anderen" ja schon die "richtige" Antwort gaben.)

Plague 10. Apr 2006 13:09

Re: Dummer SQL Fehler!?
 
Ich nutze die MySQL 4.1 Datenbank.

Alle Tipps habe ich versucht, die haben aber nichts gebracht...

Edit:
Achso eins noch zum Thema Einschränken und suchen wo der Fehler liegt.... Dieser sitzt glaube ich bei der password() Funktion... Aber sehe nicht wo der Fehler ist...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz