Я хочу передать пользовательский ввод через PHP в запрос SQL к таблице InnoDB MariaDB 10.1.37, чтобы выполнить поиск.Я хочу защитить от создания недопустимых запросов SQL.В настоящее время я удаляю известные символы операторов, такие как:
preg_replace('/[\+\-\<\>\(\)\~\*\"]/', ' ', $user_input)
Затем я добавляю символ *
к каждому слову.Таким образом, если пользовательский ввод foo bar
, запрос будет:
SELECT columnname, MATCH(columnname) AGAINST('foo* bar*' IN BOOLEAN MODE) AS score
FROM tablename;
К сожалению, есть другие символы, которые пользователь может ввести, что нарушит запрос.Например, если пользователь вводит %
, запрос будет AGAINST('%*' IN BOOLEAN MODE)
, который выдает ошибку: syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*'
.
Я мог бы попытаться отфильтровать символы, которые вызывают проблемы (черный список), или я мог бы попробоватьс символами белого списка, которые я знаю, все в порядке.
Я не могу найти ничего в документации, чтобы определить, какие символы разрешены или запрещены.
Существует ли известный набор символов, который разрешен либоили запрещено?