What are some best practices for handling user input in PHP to prevent data manipulation errors?

When handling user input in PHP, it is crucial to sanitize and validate the data to prevent data manipulation errors such as SQL injection or cross-site scripting attacks. One of the best practices is to use PHP's built-in functions like filter_var() to sanitize input and validate it against expected data types. Additionally, using prepared statements when interacting with a database can help prevent SQL injection attacks.

// Sanitize and validate user input using filter_var()
$userInput = filter_var($_POST['user_input'], FILTER_SANITIZE_STRING);

// Validate input against expected data types
if (filter_var($userInput, FILTER_VALIDATE_INT)) {
    // Input is an integer
} else {
    // Input is not an integer
}

// Use prepared statements to prevent SQL injection
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->bindParam(':username', $userInput);
$stmt->execute();