Как работает SQL запросов параметризации работы ?

я чувствую себя немного глупо, что спрашиваю это, поскольку я, похоже, единственный человек в мире, который не получить его, но здесь идет в любом случае. Я собираюсь использовать Python в качестве примера. При использовании raw SQL-запросов (я обычно использую ORMs) я использую параметризации, как в этом примере с помощью SQLite:

Метод A:

username = "wayne"
query_params = (username)
cursor.execute("SELECT * FROM mytable WHERE user=?", query_params)

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

Метод B:

username = "wayne"
cursor.execute("SELECT * FROM mytable WHERE user='%s'" % username)

Как далеко я могу сказать, что я понимаю, SQL-инъекции, как описано в этой статье Википедии. Мой вопрос заключается просто в следующем: Как метод действительно разные метод B? Почему конечный результат метода не такие, как метод B? Я предполагаю, что cursor.execute() method (часть Python DB-API specification), берет на себя корректно побега и тип проверки ввода, но это явно не указано в любом месте. В том, что все, что параметризации в этом контексте? Мне, когда мы говорим, "параметризация", все, что означает "строка подстановки, например %-форматирование. - Что неправильно?

Найдено 4 ответа:

How does SQL query parameterisation work?

http://stackoverflow.com/questions/1263125/how-does-sql-query-parameterisation-work

Посмотреть решение →

Яндекс.Метрика