Документация SQLite гласит:
Строковая константа формируется путем заключения строки в одинарные кавычки ('). Одиночная кавычка в строке может быть закодирована путем помещения двух одинарных кавычек в строку - как в Паскале. Экранирование в стиле C с использованием символа обратной косой черты не поддерживается, поскольку они не являются стандартными SQL.
Очевидно, этого недостаточно для реализации метода, который возвращает для любой входной строки a
выходная строка b
такая, что ее можно без каких-либо дополнительных манипуляций безопасно интерполировать в SQL-запрос, такой как
select * from names where name = $b;
. Очевидно, что один шаг при переходе от a
к b
заменить каждое вхождение '
(одинарная кавычка) на ''
(две одинарные кавычки), и что в качестве последнего шага необходимо добавить начальную и конечную одинарные кавычки. Тем не менее, не ясно, как обрабатывать критические символы, такие как переводы строки, поскольку в документации просто говорится, что экранирование не разрешено;также не ясно, какие символы могут вызывать проблемы.
Примечание Мне известен один из стандартных ответов на такие вопросы, как «не убегай, используй привязку параметров», которая, какэто, вероятно, правильная вещь;тем не менее, я работаю с интерфейсом, который не позволяет мне формулировать кортежи SQL values
, поэтому я должен сам придумать решение.