What are the best practices for handling database transactions securely in PHP?

When handling database transactions securely in PHP, it is important to use prepared statements to prevent SQL injection attacks. Additionally, always validate and sanitize user input before executing any database queries. Finally, consider implementing proper error handling to catch and handle any database errors that may occur.

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

// Prepare a SQL statement using a prepared statement
$stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");

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

// Handle any potential errors
if($stmt->errorCode() != '00000'){
    // Log or display the error message
    echo "Error: " . $stmt->errorInfo()[2];
}