Лучше научиться писать грамотный код, а не портянку которую вы тут воротите.
В вашем случае нужно узнать что такое MVC. Написать хоть какое то подобие валидаторов, которые возвращают или true или текст ошибки.
Сначала проверять через валидаторы все значения и возвращать сразу ошибки, если они есть. Если же нет, то строить запрос через форматирование или замену, а не через конкатенацию.
/**
*@param Request $request
*/
function my_action($request)
{
$validator = ValidatorLength(3);
$error = $validator->test($request->get('first_name'));
if ($error !== true) {
return new Response($error, 400);
}
$sql = 'SELECT * FROM "my_table" WHERE %condition %limit';
$sql_condition = 'TRUE';
$sql_limit = '';
$and_conditions = [];
if ($request->get('first_name')) {
$and_conditions[] = sprintf('first_name LIKE \%%s', $request->get('first_name'));
}
if ($request->get('limit')) {
$sql_limit = sprintf('LIMIT %d', $request->get('limit'));
}
$sql_condition = implode(" AND ", $and_conditions);
$sql = str_replace('%condition', $sql_condition, $sql);
$sql = str_replace('%limit', $sql_limit, $sql);
// ...
return new Response("Hello world");
}
Request, Response, ValidatorLength - это всё вымышленные классы.
То что вы пишите НИ В КОЕМ СЛУЧАЕ даже для теста делать нельзя. Такой код нужно выбрасывать.
Ну и да, лучше вместо замены в запросах, лучше использовать подготовленные запросы:
https://php.net/manual/ru/pdo.prepared-statements.php