prepare('SELECT id, password FROM accounts WHERE username = ?')) { // Bind parameters (s = string, i = int, b = blob, etc), in our case the username is a string so we use "s" $stmt->bind_param('s', $_POST['username']); $stmt->execute(); // Store the result so we can check if the account exists in the database $stmt->store_result(); // Check if account exists with the input username if ($stmt->num_rows > 0) { // Account exists, so bind the results to variables $stmt->bind_result($id, $password); $stmt->fetch(); // Note: remember to use password_hash in your registration file to store the hashed passwords if (password_verify($_POST['password'], $password)) { // Password is correct! User has logged in! // Regenerate the session ID to prevent session fixation attacks session_regenerate_id(); // Declare session variables (they basically act like cookies but the data is remembered on the server) $_SESSION['account_loggedin'] = TRUE; $_SESSION['account_name'] = $_POST['username']; $_SESSION['account_id'] = $id; // Redirect to the home page header('Location: home.php'); exit; } else { // Incorrect password echo 'Incorrect username and/or password!'; } } else { // Incorrect username echo 'Incorrect username and/or password!'; } // Close the prepared statement $stmt->close(); } ?>