Python 文字列形式での SQL ワイルドカードと LIKE 演算子の使用
SQL ワイルドカードと LIKE 演算子を Python 文字列形式に挿入するのは難しい場合があります。この記事では、MySQLdb を使用して MySQL クエリを実行しようとしたときに発生する一般的なエラーの解決策を提供します。
MySQLdb からのエラー
試行 3 と 4 では、MySQLdb からエラーが返され、「フォーマット文字列の引数が不足しています。」これは、Python の文字列書式設定演算子によって % 記号が書式指定子として解釈されるために発生します。
SQL インジェクションに対する脆弱性
示されている最初の 4 つの試行は、次のような脆弱性があります。 SQL インジェクション攻撃。クエリ変数などのユーザー入力は、悪意のある SQL が実行されないようにサニタイズまたはエスケープする必要があります。
正しいアプローチ
推奨されるアプローチは、プレースホルダーを使用することです。文字列の書式設定の代わりに。以下に例を示します。
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
2 つの引数がexecute() に渡されます:
このアプローチにより、次のことが保証されます。 SQL ステートメントは有効であり、SQL インジェクションから保護されています。
以上がインジェクションを回避するために、Python の「MySQLdb」で SQL ワイルドカードを安全に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。