What best practices should be followed when querying a database in PHP to prevent vulnerabilities?

To prevent vulnerabilities when querying a database in PHP, it is important to use parameterized queries or prepared statements to sanitize user input and prevent SQL injection attacks. This involves separating SQL code from user input and binding parameters to the query. Additionally, input validation should be performed to ensure that only expected data types and formats are accepted.

// Establish a database connection
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "username", "password");

// Prepare a parameterized query
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");

// Bind parameters and execute the query
$username = $_POST['username'];
$stmt->bindParam(':username', $username);
$stmt->execute();

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