sql >> Base de Datos >  >> RDS >> Mysql

Obtener un error al usar la función mysqli_escape_string

Hay demasiadas cosas mal con su código y será extremadamente difícil proporcionar una solución arreglando lo que tiene ahora.

En primer lugar, MD5 ya no se considera seguro para el almacenamiento de contraseñas.

Consultar:

Además, no está utilizando declaraciones preparadas correctamente.

Como dije, el mysqli_escape_string() la función requiere que se pase una conexión a la base de datos como primer parámetro:

Hazte un favor y usa esto, una de las respuestas de ircmaxell https://stackoverflow.com/a/29778421/

Extraído de su respuesta:

Solo usa una biblioteca. En serio. Existen por una razón.

No lo hagas tú mismo. Si estás creando tu propia sal, LO ESTÁS HACIENDO MAL . Debería usar una biblioteca que maneje eso por usted.

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

Y al iniciar sesión:

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