What are some best practices for creating a secure login system with PHP and MySQL?

To create a secure login system with PHP and MySQL, it is essential to use prepared statements to prevent SQL injection attacks, hash passwords using a strong hashing algorithm like bcrypt, and implement session management to securely store user authentication data.

// Establish a connection to the MySQL database
$connection = new mysqli("localhost", "username", "password", "database");

// Prepare the SQL statement using a prepared statement
$stmt = $connection->prepare("SELECT id, username, password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);

// Execute the query and bind the results to variables
$stmt->execute();
$stmt->bind_result($id, $username, $hashed_password);
$stmt->fetch();

// Verify the password using password_verify function
if(password_verify($password, $hashed_password)) {
    // Password is correct, create a session for the user
    session_start();
    $_SESSION['user_id'] = $id;
    $_SESSION['username'] = $username;
    // Redirect to a secure page
    header("Location: secure_page.php");
} else {
    // Password is incorrect, display an error message
    echo "Invalid username or password";
}

// Close the statement and the database connection
$stmt->close();
$connection->close();