No SQL, os valores de string precisam ser citados:
VALUES ('value1', 'value2')"
Quando você usa variáveis:
VALUES ($var1, $var2)");
Eles não são citados... a menos que as aspas estejam nos próprios valores.
Então if
$var1 = 'value1'; $var2 = 'value2'
então (depois que as variáveis são interpoladas em sua string) seu SQL fica assim:VALUES (value1, value2)"
Você pode resolver seu problema imediato adicionando aspas:
VALUES ('$var1', '$var2')");
mas isso não corrige sua grande vulnerabilidade de segurança e permite que seus dados interrompam a consulta de maneiras diferentes.
Você deve evitar criar instruções SQL montando strings de variáveis . Desta forma, leva a falhas de segurança de injeção de SQL. Use uma interface que suporte argumentos vinculados . Eles irão lidar com citações e fugas para você.