How can PHP developers securely handle user input for table names in database queries?

When handling user input for table names in database queries, PHP developers should sanitize and validate the input to prevent SQL injection attacks. One way to do this is by using prepared statements with parameterized queries to separate the data from the query logic. This helps to ensure that user input is treated as data rather than executable code.

// Assuming $tableName is the user input for the table name
$tableName = $_POST['table_name'];

// Sanitize and validate the input
if (!preg_match('/^[a-zA-Z0-9_]*$/', $tableName)) {
    die("Invalid table name");
}

// Prepare the query using a parameterized query
$stmt = $pdo->prepare("SELECT * FROM $tableName WHERE column = :value");
$stmt->bindParam(':value', $someValue);
$stmt->execute();