Sin comillas, la carga útil escaparía del valor del atributo real e iniciará un nuevo atributo con su propia carga útil:
<div class=fist onclick=console.log(document.cookie)>
Mientras que entre comillas seguirá siendo un valor de atributo único inofensivo:
<div class="fist onclick=console.log(document.cookie)">
Tenga en cuenta que para evitar XSS, también debe codificar los caracteres especiales dentro del valor.
Para la inyección SQL la situación es diferente. Se recomienda estrictamente no declarar los valores de entrada en la consulta en primer lugar.
Para evitar una inyección de SQL, se debe definir un parámetro en la consulta en lugar del valor real, que debe enviarse a la ejecución de la consulta por separado:
$stmt->prepare("SELECT * FROM t WHERE id=?");
$stmt->execute([$id]);
Por lo tanto, no debe haber ni una sola cita en la consulta relacionada con el valor agregado dinámicamente, lo que hace que la pregunta en las citas sea irrelevante.