Это плохая идея.
Уже есть правильное, правильное и работающее решение для SQL-инъекций на всех языках, платформах, средах выполнения, движке, библиотеке, что бы вы ни имели.
Это называется параметрами.
Вместо помещения значения в SQL в качестве литеральной константы, вы добавляете заполнитель параметра, а затем предоставляете значение параметра вместе с запросом, не используя никакого форматирования.Хитрости, чтобы вернуть его в SQL либо.
Любое другое решение, которое пытается «исправить» проблему, просматривая SQL или его части и пытаясь определить, является ли оно правильным, находится на уровне ниже нормы, и большинствоиз них есть другие ошибки и проблемы, о которых вы не можете видеть, о которых не знаете, и не хотите их иметь.
Так что прекратите биться вокруг куста и сделайте это правильно, чтобы начатьс.Переключитесь на использование параметров.
В PHP, говоря с MySQL, существует несколько способов, но с помощью библиотеки mysqli:
$stmt = $db->prepare('SELECT * FROM products WHERE id = ?');
$stmt->bind_param('i', $id);
$stmt->execute();
.. bind for results
$stmt->fetch();
Если переменная $ id здесь содержит небезопасный код, она будетсбой выполнения SQL, потому что если id является целым числом, его нельзя сравнивать ни с чем, кроме другого целого числа, и если оно является строкой, оно будет сравниваться со строкой, которую вы предоставили, не пытаясь выполнить строку как частьSQL.
Теперь, комментарий выявляет точку, иногда вы все равно должны изменить SQL, потому что вы обеспечите динамическое упорядочение (т.е. упорядочение, выбранное пользователем), или динамическую фильтрацию (т.е. какие фильтрыдля применения выбирается пользователем).
В этом случае решение простое: Не берите какой-либо предоставленный пользователем текст и не помещайте его в SQL .Вместо этого вы жестко кодируете константы, добавляемые в ваш SQL-код, и позволяете пользователям выбирать код, в который из этих констант добавить, в каком порядке и где.