Любая ошибка синтаксиса, вызванная передаваемыми в запрос данными говорит о том, что запрос в принципе пишется неверно. А по-старинке, путем запихивания всех переменных прямо в строку запроса.
Так
давно уже никто не делает (под "никто" я имею в виду программистов, а не самоучек, которые сами от горшка два вершка, а уже учат других как писать программы, и которых, к сожалению, развелось немыслимое количество, что на тостере, что - самое печальное - на ютубе, так что встретить нормальный код на просторах интернета - это реальная проблема).
чтобы избежать любых проблем с данными, и сделать код читабельнее и короче, данныев базу данных следует отправлять
отдельно от запроса.
$sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
$stmt = $mysqli->prepare($sql); // подготовим запрос к выполнению.
$stmt->bind_param("ss", $text, $author); // привяжем к нему переменные
$stmt->execute(); // и выполним его
три простых шага, а код становится гораздо чище, безопаснее и короче.
причем это в mysqli три, а в PDO вообще два:
$sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
$stmt = $pdo->prepare($sql); // подготовим запрос к выполнению.
$stmt->execute([$text, $author]); // сразу и привяжем и выполним