Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erhalten eines Fehlers bei der Verwendung der mysqli_escape_string-Funktion

An Ihrem Code sind viel zu viele Dinge falsch, und es wird äußerst schwierig sein, eine Lösung bereitzustellen, indem Sie das beheben, was Sie jetzt haben.

Erstens gilt MD5 nicht mehr als sicher für die Passwortspeicherung.

Konsultieren:

Außerdem verwenden Sie vorbereitete Anweisungen nicht korrekt.

Wie gesagt, der mysqli_escape_string() Funktion erfordert, dass als erster Parameter eine Datenbankverbindung übergeben wird:

Tu dir selbst einen Gefallen und verwenden Sie diese, eine der Antworten von ircmaxell https://stackoverflow.com/a/29778421/

Aus seiner Antwort gezogen:

Verwenden Sie einfach eine Bibliothek. Ernsthaft. Sie existieren aus einem bestimmten Grund.

Mach es nicht selbst. Wenn Sie Ihr eigenes Salz herstellen, MACHEN SIE ES FALSCH . Sie sollten eine Bibliothek verwenden, die das für Sie erledigt.

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);

Und beim Login:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}