Überprüfen Sie, ob Benutzername bereits vorhanden ist in der Datenbank MySQL PHP
Habe ich eine registration.php Seite habe ich gemacht und ich brauche, um zu überprüfen, ob ein Benutzername bereits in meiner Datenbank, so dass ich nicht haben, 2 Mitglieder mit gleichen Namen...
Hier ist, wie ich mich einfügen des Benutzer-info in die Datenbank (Benutzername, Passwort, Datum der Anmeldung, usw.):
mysql_query("INSERT INTO UserDb (ID, TimeStamp, UserName, Password) VALUES ('$ipaddress', NOW(), '$user_username', '$user_password')");
Wie kann ich überprüfen, dass die Datenbank "UserDb" in der "Benutzername" - Feld, um sicherzustellen, dass der Benutzer die variable "$user_username" nicht bereits vorhanden ist?
InformationsquelleAutor Albert Renshaw | 2011-12-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie das username-Feld in der Datenbank einen primary key-oder unique, die garantiert den Benutzernamen Einzigartigkeit in der Datenbank.
Dann, wenn Sie versuchen, einfügen einer bereits vorhandenen Benutzernamen die mysql_query () - Funktion fehl, wird FALSE zurückgeben.
Außerdem sollten Sie immer die Abfrage der Datenbank für die Existenz der Benutzername, mit einer einfachen select-Anweisung:
SELECT username FROM table WHERE username='$php_username_var';
"Bedeutet das, dass keine zwei Benutzer registrieren können zur gleichen Zeit?" Technisch, ja. "Wird das ein problem in der Zukunft?" Ja, es ist eine potenzielle Quelle für neue Probleme. Aber es macht keinen Sinn, in diesem Fall, um den Zeitstempel verwenden als Primärschlüssel sowieso. "Ist dieses, weil es auf "FullText -type: text" sollten Sie überlegen, Eli ' s Vorschlag, auf diese ein und stellen Sie den Benutzernamen des E-Mail-Adresse, und legen Sie eine maximale Länge. Lesen Sie mehr über primary key-und unique-Einschränkungen in hier: dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html
Ich vergaß zu erklären, dass die maximale Länge ist, um die Benutzername/E-Mail, um eine primäre Schlüssel. Erwägen Sie die Verwendung der Varchar-Datentyp.
Die Umstellung auf varchar(20) das problem behoben!
Die
$arrayUserName
ist ein array mit allen Feldern der markierten Linie, so dass Sie zu tun haben$arrayUserName["UserName"]
um den Wert von "Benutzername" - Feld.InformationsquelleAutor Telmo Marques
Können Sie die
UserName
ein eindeutiges Feld. MySQL wird dann verweigern, um einen neuen Datensatz einzufügen, wenn der Benutzername bereits existiert.Alternativ können Sie eine Abfrage ausführen, die Suche nach dem Benutzernamen. Wenn es nicht vorhanden ist, fügen Sie es. Wickeln Sie diesen in einer Transaktion, so können Sie sicher sein, dass nach Ihnen gesucht habe für einen user, eine weitere neue mit dem gleichen Namen wurde Hinzugefügt, bevor Sie die neue hinzufügen.
+1 Für die Transaktion.
Was ist eine Transaktion?
Die Dinge zu einfach, denken Sie an eine Transaktion als eine Gruppe von SQL-Anweisungen, die keine änderungen an der Datenbank, bis Sie so sagen (
COMMIT
), und Sie blockieren auch parallelen Zugriffe auf die Felder geändert werden, so dass keine weiteren Transaktionen/Kontoauszüge können änderungen an den gleichen Daten in der gleichen Zeit. Sie können auch verwerfen alle änderungen in einer Transaktion (ROLLBACK
). Lesen Sie mehr über es hier: dev.mysql.com/doc/refman/5.0/en/commit.htmlTransaktion und Tisch zusammen sperren muss etwas wissen, wie es funktioniert, sehen Sie bitte 12.3.5.1. Interaktion der Tabelle Sperren und Transaktionen in der MySQL-Dokumentation.
InformationsquelleAutor hakre
erstellen Sie einen eindeutigen Schlüssel auf UserName und wenn der INSERT-Fehler, überprüfen Sie die Fehler-Nummer.
InformationsquelleAutor Eugen Rieck
Es ist am besten, um zu überprüfen, für den Benutzernamen, zuerst, eher, als abhängig von der Datenbank, zu sagen, Sie über Fehler - immer besser zu werden explizite, anstatt die Funktionalität impliziert.
Darüber hinaus müssen Sie möglicherweise zu berücksichtigen, die situation, wo es eine oder mehrere vorhandene Datensätze mit dem gleichen Benutzernamen.
Zum Beispiel, wenn ein Benutzer registriert sich für ein Abonnement, bricht nach ein paar Monaten, und dann der Beschilderung bis Sie es später erneut.
Manchmal ist es am besten, um re-öffnen Sie das Konto, und andere Zeiten, nur um eine neue zu erstellen...In diesem Fall könnte es ok, um doppelte Zeilen mit dem gleichen Benutzernamen, so lange nur der aktuelle ist aktiv, und der rest sind für die historische Berichterstattung.
In der Tat, MÜSSEN Sie möglicherweise die doppelte Zeilen, wenn der alte user-Instanzen referenziert werden, die in Ihrem Rechnungs-Tabellen, Notizen, etc. Wenn Sie gelöscht der Benutzer würde es zu Problemen mit Ihrer Berichterstattung.
Ein Wort der Beratung als gut betrachten, mit der Benutzer die E-Mail-Adresse als Ihren Benutzernamen - Sie wissen, es ist eine Zeichenfolge, die einzigartig sind, gibt Sie ein Standard-Weg, Sie zu Kontaktieren, und kann überprüft werden bei Anmeldung.
InformationsquelleAutor Eli