What are the recommended methods for handling user input validation and sanitization in PHP to prevent SQL injection vulnerabilities?

To prevent SQL injection vulnerabilities in PHP, it is recommended to use prepared statements with parameterized queries when interacting with a database. Additionally, input validation and sanitization should be performed on user input to ensure that only safe and expected data is being processed.

// Example of handling user input validation and sanitization to prevent SQL injection

// Assuming $conn is the database connection

// Validate and sanitize user input
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);

// Prepare a SQL statement with placeholders
$stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");

// Bind parameters to the placeholders
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

// Execute the prepared statement
$stmt->execute();

// Fetch results
$results = $stmt->fetchAll();