Эта функция не самописная, а цельнотянутая. Причем из самых смрадных помоек интернета.
К защите от инъекций не имеет вообще никакого отношения.
- trim() ни к инъекциям, ни к защите отношения не имеет
- stripslashes() просто бессмысленная функция, которая только портит данные
- htmlspecialchars() не имеет отношения к SQL. Применяется при
выводе данных, а не при получении
- real_escape_string() - единственная функция, которая имеет отношение к SQL, но при этом вообще не предназначенная ни для каких защит.
Попробуйте на основании этой информации самостоятельно оценить полезность вашей функции.
Возьмем
классический пример
$_GET['id'] = '1;DROP TABLE Students;';
$id = formatstr($_GET['id']);
$sql = "SELECT * FRPM Students WHERE id=$id";
И посмотрим, помогло ли ваше самописное экранирование предотвратить хоть что-то (спойлер: нет).
(да, та функция, которую лично вы используете для выполнения запросов, выполняет только один запрос за раз. И вместо инъекции вы получите ошибку. Но это не отменяет сам факт получения инъекции.)
Как правильно все отметили выше, для защиты от инъекций используются подготовленные запросы, в которых все переменные заменяются на специальные маркеры, и передаются отдельно.