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

MySQLのパラメータ化されたクエリ

    SQLクエリに文字列補間を使用する場合は注意してください。文字列補間では入力パラメータが正しくエスケープされず、アプリケーションがSQLインジェクションの脆弱性にさらされる可能性があります。 違いは些細なことのように思えるかもしれませんが、実際には大きな違いです

    不正解(セキュリティの問題あり)

    c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
    

    正解(エスケープあり)

    c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
    

    これは、SQLステートメントのパラメーターをバインドするために使用される修飾子が異なるDB API実装間で異なり、mysqlクライアントライブラリがprintfを使用するという混乱を助長します。 より一般的に受け入れられている「?」の代わりにスタイル構文マーカー(例:python-sqlite



    1. MySQLにあるようなブールデータ型はMicrosoftSQLServerにありますか?

    2. タイムゾーン情報を使用してMySQLに日時を保存する方法

    3. JasperReportsを使用してOracleのblob列から画像を表示するにはどうすればよいですか?

    4. 'COLLATE SQL_Latin1_General_CP1_CI_AS'は何をしますか?