私は私の個人的なプロジェクトのためのMySQLデータベースと関連するアカウントの作成を自動化するのに役立つ小さなpythonスクリプトを書いています。このスクリプトの一部は、データベース名を文字列として取り、次にデータベースを作成する関数です。MySQLクエリでデータベース名をパラメータ化する安全な方法はありますか?
def createDB(dbConn, dbName):
import MySQLdb
c = dbConn.cursor()
query = """CREATE DATABASE %s;""";
c.execute(query, (dbName,))
CREATE DATAbASE test_db
のように、データベースの引用符で囲まれていない名前を尋ねたが、安全問合せにユーザーに提供デシベル名を挿入しようとする私のコードが作成されますので、これは動作しません。
CREATE DATABASE 'test_db'
あなたは「あなたのMySQL構文に近いテストで問題があります」というメッセージが表示されます。
これは個人的な使い方ではありますが、私は実際にユーザーが提供した文字列をあらゆる種類のクエリに直接挿入したくありません。それは私の宗教に対するものです。 test_db; DROP some_other_db;
などのユーザー入力が拒否されるか、正しくエスケープされるようにするpython(または他の言語)のmySQLクエリにユーザー提供のデータベース名を挿入する安全な方法はありますか?
ここで2番目の答えに従って 'conn.escape_string'を試してください:http://stackoverflow.com/questions/3617052/escape-string-python-for-mysql –