Вот как вы это делаете ... с любой базой данных: параметризованных запросов.
Ваша строка SQL теперь становится:
SELECT SOMETHING FROM SOMETHING smt WHERE smt.THING = ?
Обратите внимание на ?
(которого нет в кавычках ... это не односимвольная буквенная строка) Это указывает на параметр запроса.
Теперь каждый при выполнении запроса вы предоставляете array()
, содержащий каждое из значений параметров, которые вы хотите заменить, в порядке слева направо. Каждый раз, когда запрос выполняется (без повторной подготовки), можно использовать разные значения , поскольку эти значения не являются «частью» запроса: они являются входными данными.
Независимо от того, что содержит значение параметра, ядро СУБД никогда не увидит его как что-либо, кроме цифры c или строки значения . Он никогда не будет расценивать это как "часть SQL". Таким образом, SQL -инъекция становится невозможной.
Кроме того, значение [двоичное] используется напрямую, а не декодируется из строки символов. Так, скажем, если вы хотите использовать кавычки как часть вашего строкового параметра-значения, вы не «закодируете» их с помощью обратной косой черты. (Если вы укажете \"
, то «1045 *, за которым следует« обратная коса »sh, за которой следует кавычка», будет вполне приемлемым двухсимвольным значением.)
Вот хорошая запись: https://www.w3schools.com/php/php_mysql_prepared_statements.asp