Senza virgolette, il payload sfuggirebbe al valore dell'attributo effettivo e avvierà un nuovo attributo con il proprio carico utile:
<div class=fist onclick=console.log(document.cookie)>
Mentre con le virgolette rimarrà un innocuo valore di attributo singolo:
<div class="fist onclick=console.log(document.cookie)">
Nota che per prevenire XSS devi codificare anche i caratteri speciali all'interno del valore.
Per l'iniezione SQL la situazione è diversa. È rigorosamente non raccomandato di dichiarare i valori di input nella query in primo luogo.
Per evitare un'iniezione SQL, è necessario definire un parametro nella query al posto del valore effettivo, che deve essere inviato separatamente all'esecuzione della query:
$stmt->prepare("SELECT * FROM t WHERE id=?");
$stmt->execute([$id]);
Pertanto, ci deve essere non una singola citazione nella query relativa al valore aggiunto dinamicamente, il che rende la domanda su virgolette semplicemente irrilevante.