Are there any recommended best practices for structuring SQL queries in PHP when dealing with multiple user-selected filter options?

When dealing with multiple user-selected filter options in SQL queries in PHP, it is recommended to dynamically build the query based on the selected filters to avoid SQL injection vulnerabilities and improve performance. One approach is to use prepared statements and bind parameters to safely incorporate user input into the query.

// Sample code for dynamically building SQL query with user-selected filters

// Assuming $filters is an array of user-selected filter options
$filters = array(
    'category' => 'Books',
    'price' => 50,
    'author' => 'John Doe'
);

// Initialize the base query
$sql = "SELECT * FROM products WHERE 1=1";

// Loop through the filters and dynamically add conditions to the query
foreach ($filters as $key => $value) {
    $sql .= " AND $key = :$key";
}

// Prepare the SQL statement
$stmt = $pdo->prepare($sql);

// Bind parameters based on the filters
foreach ($filters as $key => $value) {
    $stmt->bindParam(":$key", $value);
}

// Execute the query
$stmt->execute();

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

// Use the $results array as needed