sql >> データベース >  >> RDS >> Mysql

Python / MySQLコンボに最適なエスケープ文字戦略は何ですか?

    次に例を示します:

    import MySQLdb
    column = str(MySQLdb.escape_string(row[1]))
    query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 
    cursor2.execute(query, [row[3], row[0]])
    

    更新

    ここに簡単な解説があります:

    column = str(MySQLdb.escape_string(row[1]))
    

    クエリに含まれるものはすべてエスケープすることをお勧めします。この場合、列名を動的に追加しているため、クエリを実行する前に列名をエスケープする必要があります。

    query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 
    

    ここでクエリを作成しています。私は2つのことを達成しようとしています:(1)columnを使用して列名が入力されたクエリを作成する 前の行で宣言された変数(2)は、クエリの実行中に実際のパラメーターによって入力されるプレースホルダーを追加します。

    スニペットdict(column = column) 実際には、辞書を作成する別の方法です{'column': column} 。これは、dict を使用して可能になります。 コンストラクタ。まだ他のプレースホルダーに入力したくないので、2つのパーセント記号(%%を使用してそれらをエスケープします 。

    cursor2.execute(query, [row[3], row[0]])
    

    最後にクエリを実行します。実行する前にクエリを出力すると、文字列update myTable set column_name = %s where ID = %sが表示されます。 。



    1. PDOでmysql_real_escape_stringを使用する(ローカルホストサーバーに接続しない)

    2. データローカル入力ファイルのロードphpmysql

    3. MySQLソケットは、何千もの連続した接続の後に接続を拒否します

    4. PDObind_paramは未定義のメソッドです