Chcete-li se vyhnout injekcím, použijte příkaz execute
s %s
místo každé proměnné pak předejte hodnotu prostřednictvím seznamu nebo n-tice jako druhý parametr execute
. Zde je příklad z dokumentace
:
c=db.cursor()
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""", (max_price,))
Všimněte si, že se jedná o čárku , nikoli % (což by byla přímá substituce řetězce, nikoli escapovaná). Nedělejte to :
c.execute("""SELECT spam, eggs, sausage FROM breakfast
WHERE price < %s""" % (max_price,))
Kromě toho nesmíte používat jednoduché uvozovky kolem držitele pozice ('%s'
), pokud je parametrem řetězec, jak je ovladač poskytuje.