What are some common pitfalls when using concatenated variables in PHP queries, and how can they be avoided?

One common pitfall when using concatenated variables in PHP queries is the risk of SQL injection attacks if user input is not properly sanitized. To avoid this, it is recommended to use prepared statements with parameterized queries, which automatically handle escaping and sanitizing input values.

// Example of using prepared statements to avoid SQL injection
$mysqli = new mysqli("localhost", "username", "password", "database");

// Check connection
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// Prepare a SQL statement with a parameter
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);

// Set the parameter and execute the statement
$username = $_POST['username'];
$stmt->execute();

// Get the result set
$result = $stmt->get_result();

// Process the result set
while ($row = $result->fetch_assoc()) {
    // Do something with the data
}

// Close the statement and connection
$stmt->close();
$mysqli->close();