Есть ли в MySQL эквивалент строковых констант в кавычках Postgresql? - PullRequest
3 голосов
/ 25 апреля 2009

В postgresql можно использовать строковые константы в кавычках, чтобы избежать экранирования одинарных кавычек в константных строках:

Без строковых констант в кавычках:

'Jeff''s table'

со строковыми константами в кавычках:

$$Jeff's table$$

Есть ли аналог MySQL?

При редактировании: я не ищу способ очистки входных данных, я ищу способ облегчить чтение запросов, которые генерируют sql.

Ответы [ 2 ]

1 голос
/ 14 мая 2012

Вместо этого вы можете заключить вашу строку в двойные кавычки, например,

"Jeff's table"

Примечание. Если это не работает, значит, у вас включен ANSI_QUOTES режим SQL. Документы MySQL говорят:

Если включен режим ANSI_QUOTES SQL, строковые литералы могут заключаться в кавычки только в одинарных кавычках, поскольку строка в двойных кавычках интерпретируется как идентификатор.

1 голос
/ 25 апреля 2009

Нет, потому что это на самом деле не работает. Злоумышленник просто добавляет пару знаков доллара к своей попытке инъекции.

Правильный способ справиться с этим - это система, которая использует реальные параметры запроса, так что значения параметров никогда не подставляются непосредственно в строку запроса. Это также, как правило, лучше для производительности, потому что база данных лучше справляется с кэшированием плана выполнения, который вы не заканчиваете динамическим построением строки, что обычно медленно в современных языках.

Отсутствие избыточных конкатенационных операторов также значительно улучшает читабельность кода. Вместо этого:

sql = "SELECT * FROM MyTable WHERE Column1=$$" + somevarialbe + "$$ AND Column2=$$" + OtherVariable";

это просто так:

sql = "SELECT * FROM MyTable wHERE Column1=@Value1 AND Column2=@Value2";

Хмм ... Хорошо, теперь я вижу некоторые ограниченные возможности для этой функции.

Представьте себе систему отслеживания билетов с хранимой процедурой получения открытых билетов. Вы могли бы на самом деле жестко закодировать литерал «open» в предложении where запроса. Не то чтобы это был хороший дизайн & mdash; Статус тикета должен быть в таблице со своим собственным ключом, чтобы вы жестко закодировали ключ, а не текст. Но это сеет семя для чего-то действительного и более сложного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...