Неподготовленных операторов достаточно, если у вас есть SQL-запрос, который полностью жестко запрограммирован и не требует PHP-переменных в SQL.
Вот пример:
$result = $mysqli->query("SELECT * FROM mytable WHERE updated_at > NOW() - INTERVAL 7 DAY");
Запрос является автономным.Это просто фиксированная строка, полностью контролируемая вашим приложением.Ни один ненадежный контент никак не может повлиять на запрос.
Если вашему запросу требуется переменная часть, используйте параметры запроса, например:
$stmt = $mysqli->prepare("SELECT * FROM mytable WHERE updated_at > NOW() - INTERVAL ? DAY");
$stmt->bind_param("i", $number_of_days);
$stmt->execute();
Смысл параметров запроса - отделитьпотенциально ненадежное содержимое на этапе синтаксического анализа SQL.Используя параметры, значение связанной переменной не объединяется с запросом до тех пор, пока не будет проанализирован SQL.Следовательно, связанный параметр не может повлиять на логику запроса - параметр будет ограничен, чтобы действовать как одно скалярное значение в запросе.