Найти - Пользователи
Полная версия: Защита от sql инъекций MySQLdb
Начало » Базы данных » Защита от sql инъекций MySQLdb
1
andreiru
Здравствуйте!

Пытаюсь сделать простой запрос с защитой от sql инъекций:

cursor.execute(u'SELECT * FROM list WHERE type_id =?', (2,))
Возникает ошибка:
  File "/usr/local/lib/python2.6/dist-packages/cherrypy/_cprequest.py", line 645, in respond
response.body = self.handler()
File "/usr/local/lib/python2.6/dist-packages/cherrypy/lib/encoding.py", line 188, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/cherrypy/_cpdispatch.py", line 29, in __call__
return self.callable(*self.args, **self.kwargs)
File "/var/www/events/www.py", line 81, in index
cursor.execute(u'SELECT * FROM list WHERE type_id =?', (str(2),))
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 151, in execute
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
Подскажите пожалуйста что не так делаю ?
Александр Кошелев
andreiru
Подскажите пожалуйста что не так делаю ?
Плейсхолдер в запросе используете не верный.
andreiru
Александр Кошелев
andreiru
Подскажите пожалуйста что не так делаю ?
Плейсхолдер в запросе используете не верный.
Плейсхолдер - это знак вопроса (type_id =?) ?
PooH
andreiru
Плейсхолдер - это знак вопроса (type_id =?) ?
%s
http://mysql-python.sourceforge.net/MySQLdb.html#some-examples
andreiru
PooH, спасибо!

Как быть если мне необходимо использовать LIKE %..% в запросе =>
sql = u'SELECT * FROM list WHERE name LIKE \%%s\%'
Выдаёт ошибку, пробовал экранировать, не помогает !?
PooH
andreiru
Как быть если мне необходимо использовать LIKE %..% в запросе =>
sql = u'SELECT * FROM list WHERE name LIKE \%%s\%'
Выдаёт ошибку, пробовал экранировать, не помогает !?
Вообще заэкранировать процент %%, но вам это не поможет, потому как MySQLdb любезно заключит строковую переменную в кавычки. Действовать надо так
cursor.execute(u'SELECT * FROM list WHERE name LIKE %s', ('%%%s%%' % name,))
andreiru
PooH ясно, спасибо большое!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB