Es gibt verschiedene Möglichkeiten, um zu überprüfen, ob von Benutzer bereitgestellte Daten mit Daten in einer MySQL-Datenbank mit PHP übereinstimmen. Der beste Ansatz hängt davon ab, was Sie vergleichen und wie Sie mit potenziellen Diskrepanzen umgehen möchten. Hier sind einige Beispiele, die sich auf Best Practices der Sicherheitsversicherung konzentrieren:
1. Überprüfen Sie nach einem einzelnen Benutzer (z. B. Anmeldung):
Dies ist das häufigste Szenario. Wir prüfen, ob ein Benutzername und ein Passwort mit einem Datensatz in der Datenbank übereinstimmen. entscheidend, wir werden das Passwort vor dem Vergleich haben. Speichern Sie niemals Passwörter in einfachem Text!
`` `php
Php
// Datenbankanmeldeinformationen (ersetzen Sie diese durch Ihre tatsächlichen Anmeldeinformationen!)
$ serverName ="your_servername";
$ userername ="your_username";
$ password ="your_password";
$ dbname ="your_dbname";
// Benutzereingabe (sanitieren Sie dies!)
$ userernameInput =$ _post ["userername"];
$ passwayInput =$ _post ["Passwort"];
// Benutzereingaben sanitieren, um die SQL -Injektion zu verhindern
$ userernameInput =mysqli_real_esescape_string ($ conn, $ usernameInput);
$ passwordInput =mysqli_real_escape_string ($ conn, $ passingInput);
// Verbindung erstellen
$ conn =new MySQLI ($ sservername, $ userername, $ password, $ dbname);
// Verbindung überprüfen
if ($ conn-> connect_error) {
Die ("Verbindung fehlgeschlagen:". $ conn-> connect_error);
}
// Vorbereiten und binden Sie
$ stmt =$ conn-> vorbereiten ("Wählen Sie password_hash von Benutzern, wo userername =?");
$ stmt-> bind_param ("s", $ userernameInput);
$ stmt-> execute ();
$ result =$ stmt-> get_result ();
if ($ result-> num_rows> 0) {
$ row =$ result-> fetch_assoc ();
$ hashedPassword =$ row ["password_hash"];
// Passwort über password_verify überprüfen (PHP-integrierte Kennwort-Hashing-Funktion)
if (password_verify ($ passwaysInput, $ hashedPassword) {
// erfolgreich anmelden
echo "Login erfolgreich!";
} anders {
// falsches Passwort
echo "falsches Passwort";
}
} anders {
// Benutzername nicht gefunden
Echo "Benutzername nicht gefunden";
}
$ stmt-> close ();
$ conn-> close ();
?>
`` `
Erläuterung:
* Datenbankanmeldeinformationen: Ersetzen Sie die Platzhalter -Anmeldeinformationen durch Ihre tatsächlichen Details von MySQL -Datenbank.
* Benutzereingabe: Dieser Code geht davon aus, dass der Benutzername und das Passwort über eine Postanforderung gesendet werden. sanitieren Sie die Benutzereingabe immer Um Schwachstellen für SQL -Injektionen zu verhindern. `mysqli_real_escape_string ()` ist ein grundlegender Schritt, aber hergestellte Aussagen (hier verwendet) sind weitaus robuster.
* Vorbereitete Anweisung: Eine vorbereitete Anweisung verhindert die SQL-Injektion, indem die SQL-Abfrage von den von den Benutzer bereitgestellten Daten getrennt wird. Es ist für die Sicherheit von entscheidender Bedeutung.
* Passwort Hashing: Die Datenbank sollte Kennwort *Hashes *, keine einfachen Textkennwörter speichern. `passwart_hash ()` erstellt einen sicheren Hash, und `passwart_verify ()` vergleicht die Eingabe des Benutzers mit dem gespeicherten Hash.
* Fehlerbehandlung: Der Code enthält eine grundlegende Fehlerbehandlung für Datenbankverbindung und Abfragebefehler.
2. Überprüfen Sie mehrere Übereinstimmungen (z. B. durchsuchen einer Tabelle):
Wenn Sie mehrere Übereinstimmungen basierend auf Benutzereingaben finden müssen (z. B. nach Produkten mit einem bestimmten Namen), müssen Sie die Abfrage anpassen:
`` `php
Php
// ... (Datenbankverbindung wie oben) ...
$ searchterm =$ _post ["suchterm"];
$ searchterm =mysqli_real_escape_string ($ conn, $ suchterm); // sanieren!
$ sql ="Select * aus Produkten, wobei der Name '%$ $ suchterm%'"; // Einfaches Beispiel - Verwenden Sie die vorbereitete Erklärung für eine bessere Sicherheit!
$ result =$ conn-> query ($ sql);
if ($ result-> num_rows> 0) {
while ($ row =$ result-> fetch_assoc ()) {
// Verarbeiten Sie jede passende Zeile
Echo "Produkt:". $ row ["Name"]. "
";
}
} anders {
echo "Keine Produkte gefunden.";
}
// ... (Schließanschluss) ...
?>
`` `
Wichtiger Hinweis: Das obige Suchbeispiel verwendet eine String -Verkettung, die für die SQL -Injektion anfällig ist, wenn "$ $ searchterm" nicht saniert ist . Schreiben Sie sie für eine sichere Lösung mithilfe von vorbereiteten Aussagen neu. Beispiel:
`` `php
$ STMT =$ conn-> vorbereiten ("SELECT * aus Produkten, wo der Name wie?");
$ suchterm ="%". $ suchterm. "%"; // Wildcards für gleich hinzufügen
$ stmt-> bind_param ("s", $ suchterm);
$ stmt-> execute ();
// ... Rest des Codes, um Ergebnisse zu verarbeiten ...
`` `
Denken Sie daran, die Platzhaltertabelle und die Spaltennamen durch Ihr tatsächliches Datenbankschema zu ersetzen. Priorisieren Sie die Sicherheit immer, indem Sie vorbereitete Aussagen und ordnungsgemäße Eingabeeinstellungen verwenden, um SQL -Injektionsangriffe zu verhindern. Erwägen Sie, parametrisierte Abfragen für jede Interaktion mit der Benutzereingabe und Ihrer Datenbank zu verwenden. Für komplexere Szenarien oder große Datensätze möchten Sie möglicherweise fortgeschrittenere Techniken wie gespeicherte Verfahren untersuchen.