Прежде чем кто-либо придет к выводам о природе этого вопроса, я уже знаю о параметризованных / подготовленных высказываниях и использую их по мере возможности. К сожалению, не всегда возможно использовать их при построении динамических запросов.
Мне интересно работать с базами данных, отличными от MySQL, но я не могу легко найти хорошие источники того, как экранировать строки для каждого расширения базы данных, чтобы предотвратить SQL-инъекцию .
В документации PHP перечислены следующие расширения баз данных, специфичные для разных поставщиков. Я ободрил те, которые меня больше всего интересуют:
- CUBRID
- Dbase
- DB ++
- FrontBase
- FilePro
- Firebird / InterBase
- Informix
- IBM DB2
- Энгр
- MaxDB
- Монго
- Msql
- Mssql
- MySQL
- Mysqli
- Mysqlnd
- mysqlnd_ qc
- OCI8
- Ovrimos SQL
- Paradox
- PostgreSQL
- SQLite
- SQLite3
- Sybase
- Токио_ тиран
Пример динамического запроса, который не работает для большинства параметризованных операторов:
"Select $col1, $col2 from $table where $col1 = ?"
После экранирования $col1
, $col2
и $table
оператор может использоваться в подготовленном операторе.