sql >> Databasteknik >  >> RDS >> Mysql

Får ett fel med funktionen mysqli_escape_string

Det är alldeles för många saker fel med din kod och det kommer att vara extremt svårt att ge en lösning genom att fixa det du har nu.

För det första anses MD5 inte längre vara säker att använda för lösenordslagring.

Konsultera:

Dessutom använder du inte förberedda påståenden korrekt.

Som jag sa, mysqli_escape_string() funktionen kräver att en databasanslutning skickas som den första parametern:

Gör dig själv en tjänst och använd detta, ett av ircmaxells svar https://stackoverflow.com/a/29778421/

Drag ur hans svar:

Använd bara ett bibliotek. Allvarligt. De finns av en anledning.

Gör det inte själv. Om du skapar ditt eget salt, GÖR DU DET FEL . Du bör använda ett bibliotek som hanterar det åt dig.

$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]);

Och vid inloggning:

$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
}


  1. Veckovisa aktiva användare för varje dag från loggen

  2. Kan jag definiera flera händelser i en Trigger-deklaration i mysql?

  3. Hur stor är för stor för ett MySQL-bord?

  4. Vilka är skillnaderna mellan ett klustrat och ett icke-klustrat index?