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

mysqlとgolangで動的クエリを構築する

    文字列のフォーマット方法に関する質問に答えるには、簡単な答えはfmt.Sprintf 文字列を構造化します。 ただし dbクエリにfmt.Sprintfを使用する際の簡単なメモについては、さらに下を参照してください。

    例:

    query := fmt.Sprintf("SELECT id FROM users WHERE login='%s'", login)
    err = db.Query(query)
    
    // Equivalent to:
    rows, err := db.Query("SELECT id FROM users WHERE login=?", login)
    

    これをクエリに使用すると、インジェクションから安全になります。そうは言っても、これを変更して、作成/更新/削除にもdb.Execを使用したくなるかもしれません。一般的な経験則として、 fmt.Sprintfでdb.Execを使用し、最初に入力をサニタイズしない場合は、SQLインジェクションを利用できます。 。

    db.Execを使用したfmt.Sprintfが悪い理由の簡単な例を使用したGoPlay:
    https: //play.golang.org/p/-IWyymAg_Q

    db.Query を使用する必要があります または db.Prepare これらの種類の攻撃ベクトルを回避するための適切な方法で。インジェクションセーフなスニペットを作成するには、上記のコードサンプルを変更する必要があるかもしれませんが、開始するのに十分な情報を提供できれば幸いです。




    1. Spring-Boot、spring-dataJPAを使用してMySqlにUnicode文字列を保存できません

    2. 機能ユニット

    3. java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z

    4. PHP PDOは、重複キー挿入時に例外をスローしません