Учить РНР надо не по написанным нубами при царе Горохе руководствам, а по нормальным учебникам.
Или хотя бы по нормальным ответам на тостере.
https://qna.habr.com/q/918033#answer_1847841
Никакого $data в запросе быть не должно. Любые переменные должны отправляться в БД
отдельно
Для этого надо
Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
Привязать переменные к запросу.
Выполнить подготовленный ранее запрос с помощью с помощью execute()
В mysqli это будет так
$sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
$stmt = $link->prepare($sql);
$stmt->bind_param("sssss", $title, $discription, $date, $path);
$stmt->execute();
bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".
И тогда никаких ошибок запроса уже никогда не будет. Не говоря уже про инъекции.