MySQL Datenbank mit Login-System.
Clausismus
- datenbank
Hi,
ich wollte gerne ein Login-System in MySQL über eine gespeicherte Prozedur schreiben:
Erstmal bisschen Code:
CREATE DATABASE Test;
USE Test;
CREATE TABLE Test.t_Benutzer
(
Name CHAR(32),
Passwort CHAR(32),
PRIMARY KEY(Name)
);
INSERT INTO Test.t_Benutzer(Name ,Passwort) VALUES ('root', '0000');
Die SQL-Befehle im oberigen Code funktionieren über "PHPMyAdmin" perfekt.
Meine Idee war, dass bei jeden Aufruf einer gespeicherte Prozedur, erstmal überprüft wird, ob Benutzer und Passwort, die in der Tabelle "Test.t_Benutzer" stehen richtig ist.
Ich hab mir deshalb diese gespeicherte Prozedur geschrieben:
DELIMITER $$
CREATE PROCEDURE Test.Anmelden(IN BenutzerName CHAR(32), IN Passwort CHAR(32), OUT Angemeldet BOOL)
BEGIN
DECLARE erfolg BOOL DEFAULT FALSE;
DECLARE passw CHAR(32);
SELECT Passwort INTO passw FROM Test.t_Benutzer WHERE Name=BenutzerName;
IF passw=Passwort THEN
erfolg=TRUE;
END IF;
SELECT erfolg INTO Angemeldet;
END$$
DELIMITER;
Die gespeicherte Prozedur soll überprüfen, ob der Benutzername und Passwort richtig ist, indem FALSE oder TRUE, je nachdem ob richtig angemeldet, über den Parameter
"Angemeldet" zurückgeliefert wird.
Das Problem ist:
1. Ich hantiere zum ersten mal mit gespeicherten Prozeduren (NOOB).
2. PHPMyAdmin liefert mir eine Fehlermeldung bei dem einfügen der gespeicherte Prozedur, die ich nicht verstehe:
SQL-Befehl:
DELIMITER $$ CREATE PROCEDURE Test.Anmelden(
IN BenutzerNameCHAR( 32 ) ,
IN PasswortCHAR( 32 ) ,
OUT Angemeldet BOOL
) BEGIN DECLARE erfolg BOOL DEFAULTFALSE;
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
CREATE PROCEDURE Test.Anmelden(IN BenutzerName CHAR(32), IN Pass' at line 1
Ich hoffe ihr könnt mir helfen.
Thx
Hi,
hast du eventuell mal den Rat befolgt, den dir Mysql als Teil der Fehlermeldung ausgibt?
check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
Also was tut dieses DELIMITER Zeugs? Und kann man das ganze vielleicht auch ohne selbiges ausführen? Also nur
CREATE PROCEDURE Test.Anmelden(IN BenutzerName CHAR(32), IN Passwort CHAR(32), OUT Angemeldet BOOL)
BEGIN
DECLARE erfolg BOOL DEFAULT FALSE;
DECLARE passw CHAR(32);
SELECT Passwort INTO passw FROM Test.t_Benutzer WHERE Name=BenutzerName;
IF passw=Passwort THEN
erfolg=TRUE;
END IF;
SELECT erfolg INTO Angemeldet;
END
Ausserdem kannst du doch gleich so schreiben (denke ich mal)
SELECT TRUE INTO erfolg
FROM Test.t_Benutzer
WHERE Test.t_Benutzer.Name =BenutzerName AND
Test.t_Benutzer.Passwort=Passwort
Wenn es da kein Match gibt sollte auch kein TRUE in deine Erfolgsvariable geschrieben werden.
Allerdings finde ich die Variablennotation etwas doppeldeutig. Die Variable für Passwort heisst "Passwort" und die Spalte auch? Gibt das nicht evendudel Probleme?
Gruss, Frank