Datenprüfung mit MySQL oder mit PHP durchführen?
Tomas
- programmiertechnik
0 Bademeister
Hallo zusammen,
Ich schreibe gerade ein Login-System in PHP. Die Daten werden in einer MySQL-Datenbank gespeichert. Aktuell geht es um das Angemeldet-bleiben durch Cookies.
Die Cookies übertragen die Daten Benutzer-Nr, Passwort-Hash und anderes.
Mir ist nun aufgefallen, dass ich entweder direkt in der MySQL-Abfrage prüfen kann, ob die Daten korrekt sind (WHERE mit Benutzer-Nr und PW-Hash).
Andererseits könnte ich aber auch alle Daten anhand der Benutzer-Nr. abfragen und dann mit PHP auf ihre Korrektheit überprüfen.
Zu ebachten ist eventuell auch noch, dass bei der PHP-Abfrage bereits ein paar WHERE-Klauseln existieren.
Was wäre hier sinnvoller bzw. effizienter?
Hoffe auf Aufklärung :-)
Gruß, Tomas
Andererseits könnte ich aber auch alle Daten anhand der Benutzer-Nr. abfragen und dann mit PHP auf ihre Korrektheit überprüfen.
Dann muesstest Du Dir die Daten aller Benutzer ausgeben lassen, obwohl alle bis auf evtl einen voellig uninteressant sind. Das ist extrem ineffizient, pruef lieber gleich in der Datenbank.
Gruss
der Bademeister
Andererseits könnte ich aber auch alle Daten anhand der Benutzer-Nr. abfragen und dann mit PHP auf ihre Korrektheit überprüfen.
Dann muesstest Du Dir die Daten aller Benutzer ausgeben lassen, obwohl alle bis auf evtl einen voellig uninteressant sind. Das ist extrem ineffizient, pruef lieber gleich in der Datenbank.
Hallo,
da habe ich wohl zu eifrig getippt! Ich meinte, ich frage den Datensatz des Benutzers mit dessen Nummer ab und überprüfe die restlichen Daten wie Passwort und IP.
Danke derweil, Tomas
da habe ich wohl zu eifrig getippt! Ich meinte, ich frage den Datensatz des Benutzers mit dessen Nummer ab und überprüfe die restlichen Daten wie Passwort und IP.
kannst du doch - select userid from usertabelle where user = username, password = passwordhash, ip = ip usw
Hallo,
kannst du doch - select userid from usertabelle where user = username, password = passwordhash, ip = ip usw
Dass ich das kann ist mir bekannt, danke. Ich frage mich ja nur, ob das auslesen aus der Datenbank mit anschließender Prüfung durch PHP besser oder schlechter ist, als eine Abfrage mit Zahlreichen WHERE-Bedingungen, die diese Prüfung übernehmen.
Ich muss dabei ja bedenken, dass es eine Prüfung ist, die zig Mal (aufgrund hoher Benutzerzahl) durchgeführt wird.
Gruß, Tomas
Ich muss dabei ja bedenken, dass es eine Prüfung ist, die zig Mal (aufgrund hoher Benutzerzahl) durchgeführt wird.
das sagte mein vorredner bereits
warum 1000 benutzerdatensätze auslesen und vergleichen wenn man nur einen braucht?
wenn du jetzt 1000 besucher hast, musst du anstatt 1000 datensätze 1000000 auslesen - genau aus dem grund ist die vergleichsmöglichkeit mit der datenbank in diesem fall die schnellere
wenn du hingegen sowieso alle daten benötigst, musst du testen was schneller ist
aber wie gesagt, es ist absurd die ganze sau zu schlachten, wenn du nur eine stelze brauchst
Mahlzeit Tomas,
kannst du doch - select userid from usertabelle where user = username, password = passwordhash, ip = ip usw
Dass ich das kann ist mir bekannt, danke. Ich frage mich ja nur, ob das auslesen aus der Datenbank mit anschließender Prüfung durch PHP besser oder schlechter ist, als eine Abfrage mit Zahlreichen WHERE-Bedingungen, die diese Prüfung übernehmen.
Schlechter. Ein Datenbanksystem ist doch genau dafür da: gezielt bestimmte Daten anhand verschiedener Kriterien aus einer unübersichtlich großen Mente herauszusuchen. Was willst Du denn? Du willst doch entweder genau einen Datensatz (nämlich den des angemeldeten Benutzers) oder keinen (wenn die Daten nicht stimmen. Wieso also u.U. viele heraussuchen und dann "von Hand" nachprüfen?
Ich muss dabei ja bedenken, dass es eine Prüfung ist, die zig Mal (aufgrund hoher Benutzerzahl) durchgeführt wird.
Ja und? Wenn Dein DBMS das nicht kann, hast Du einen Fehler gemacht: entweder bei der Auswahl desselben oder beim Aufbau Deiner Tabellenstruktur (inkl. Indizes usw.).
MfG,
EKKi
Hallo,,
Ich muss dabei ja bedenken, dass es eine Prüfung ist, die zig Mal (aufgrund hoher Benutzerzahl) durchgeführt wird.
Hier besteht das Verständnisproblem für euch liebe Helfer. Aus der Datenbank kommt so oder so immer nur ein Datensatz. Die Frage ist, ob es besser wäre, das was geprüft werden muss (bei diesem einen Datensatz) durch die Abfrage oder durch PHP durchführen zu lassen.
Gruß, Tomas
Hallo,
Die Frage ist, ob es besser wäre, das was geprüft werden muss (bei diesem einen Datensatz) durch die Abfrage oder durch PHP durchführen zu lassen.
was hast Du gemessen?
Freundliche Grüße
Vinzenz
Hallo,
was hast Du gemessen?
ich bin momentan nicht in der Lage, selbst zu messen, daher hatte ich auf Erfahrungswerte gehofft.
Gruß, Tomas
Hallo
ich bin momentan nicht in der Lage, selbst zu messen, daher hatte ich auf Erfahrungswerte gehofft.
und warum stellst Du bei Mikrooptimierung die Performancefrage?
Bei Deiner Abfrage *muss* das Drumherum, Verbindungsaufbau, ... viel aufwendiger sein als das Durchführen der Abfrage. Weitere Kriterien, die aus maximal einem Datensatz die Anzahl auf Null reduzieren, können nicht viel kosten. Es kann ja nur nur noch ein Datensatz geprüft werden. Ist die Anzahl der Datensätze bereits Null, dann werden weitere Prüfungen gar nicht mehr durchgeführt.
Aus programmiertechnischer Sicht halte ich es - genau wie es Dir EKKi bereits gesagt hat - für sinnvoll, die Kriterien an *einer* Stelle zu bündeln.
Wenn Deine Anwendung den Anforderungen nicht genügend sollte, dann prüfe, wo der Flaschenhals vorliegt - und beseitige zunächst genau diesen.
Freundliche Grüße
Vinzenz
echo $begrüßung;
Aus der Datenbank kommt so oder so immer nur ein Datensatz.
Nein, wenn nicht mal der Username gefunden wurde, kommt auch schon mal eine leere Menge zurück.
Die Frage ist, ob es besser wäre, das was geprüft werden muss (bei diesem einen Datensatz) durch die Abfrage oder durch PHP durchführen zu lassen.
Gesucht werden muss der Datensatz vom DBMS auf alle Fälle. Ein Kriterium mehr oder weniger spielt dabei keine Bratsche. Wenn du die Prüfung durch das DBMS machen lässt und dabei kein übereinstimmender Datensatz gefunden wurde, bekommst du eine leere Ergebnismenge. Darauf musst du ja sowieso am Client prüfen. Du kannst dir dann weitere Prüfungen und Verarbeitungen sparen.
echo "$verabschiedung $name";
Hallo,
Nein, wenn nicht mal der Username gefunden wurde, kommt auch schon mal eine leere Menge zurück.
Ich frag nach der ID ab, aber macht nichts, dank dir und Vinzenz hab ich jetzt meinen Problempunkt gefunden und ausgemerzt. Dankeschön.
Freundliche Grüße, Tomas