Как безопасно отправлять пользовательский текст в базу POST запросом?
Перед тем как что-то куда-то добавлять надо сначала разобраться что ты делаешь.
В частности понять что браузер, веб-сервер, и база данных - это разные вещи, и для каждой нужна своя обработка данных. 

В-первых, POST запросом ничего добавить в базу нельзя.
База вообще ничего не знает про пост запросы.  POST запросом можно отправить текст только в РНР. 
А РНР уже будет добавлять в БД.

Про HTML база данных тоже ничего не знает. Поэтому "htmlspecialchars" к базе данных не имеет никакого отношения. И делать это для добавления в БД не нужно. Это функцию надо применять при выводе данных в браузер, а не при сохранении в базу данных.

Вот теперь, когда мы разобрались что у нас где, можно наконец ответить на твой вопрос

Для безопасного добавления данных в БД из РНР, надо отправлять их отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда. 
И не важно - пользовательский у тебя текст, или какой-то другой, POST у тебя запрос,  или вообще никакого запроса не было - все эти вещи к работе с БД из РНР не имеют никакого отношения. Важно только то, что данные всегда отправляются в БД отдельно от запроса. 
Для этого надо

Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
Привязать переменные к запросу.
Выполнить подготовленный ранее запрос с помощью с помощью execute()

В mysqli это будет так
$sql = "INSERT INTO  table (name, text, message, date, rating) VALUES (?,?,?,?)";
$stmt = $link->prepare($sql);
$stmt->bind_param("sssss", $name, $text, $message, $date);
$stmt->execute();
bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
$sql = "INSERT INTO  table (name, text, message, date, rating) VALUES (?,?,?,?)";
$stmt = $link->prepare($sql);
$stmt->execute([$name, $text, $message, $date]);
А дураков, которые сами не знают, как текст в базу сохранить, слушать не надо.
Еще вот это: 
https://www.php.net/manual/ru/function.mysql-escap...
А лучше конечно это: https://www.php.net/manual/ru/book.pdo.php