Escape-строка в%

Я использую PyMySQL для запроса из базы данных MySQL в Python:

filter = "Pe"
connection = pymysql.connect(host="X", user="X", password="X", db="X", port=3306, cursorclass=pymysql.cursors.SSCursor)
cursor = connection.cursor()
sqlquery = "SELECT * FROM usertable WHERE name LIKE '%%s%'"
cursor.execute(sql, (filter))
response = cursor.fetchall()
connection.close()

Это ничего не возвращает. Я мог бы написать:

sqlquery = "SELECT * FROM usertable WHERE name LIKE '%" + filter +"%'"

и выполнить: cursor.execute(sql), но тогда я теряю выход, что делает программу уязвимой для инъекционных атак, верно?

Есть ли способ, которым я мог бы вставить значение в LIKE, не теряя escape?

...WHERE name LIKE '%%%s%%'" не работает. Я думаю, что%s добавляет 'с обеих сторон замененной экранированной строки как часть своей функции в PyMySQL.

2 ответа

Решение

Вам нужно передать весь шаблон в качестве параметра запроса и использовать кортеж:

filter = "%Pe%"
sql = "SELECT * FROM usertable WHERE name LIKE %s"
cursor.execute(sql, (filter,))

Удвойте % ты хочешь сохранить.

sqlquery = "SELECT * FROM usertable WHERE name LIKE '%%%s%%'"
Другие вопросы по тегам