これは、MySQLDBを使用するほぼすべての人を混乱させます。 Pythonの文字列置換ではなく、execute関数に引数を渡します。クエリ文字列の%sは、Python文字列置換というより、プリペアドステートメントのように使用されます。これにより、MySQLDBがエスケープを実行するため、SQLインジェクションも防止されます。以前と同じように(%と文字列置換を使用)、インジェクションに対して脆弱です。
- 引用符は使用しないでください。 MySQLDBはそれらをそこに配置します(必要な場合)。
-
%の代わりに、を使用します。ここでも、実行関数の引数としてタプルを渡しています。
self.dbc.execute( "select * from car where reg =%s"、(reg、))