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

MySQLDBへの動的SQLクエリの作成

    次のようなフィールド名と値を持つマップがある場合:

    m := map[string]interface{}{"UserID": 1234, "Age": 18}
    

    次に、次のようにクエリを作成できます:

    var values []interface{}
    var where []string
    for _, k := range []string{"userId", "gender", "age", "name", "height", "weight", "ethnicity"} {
        if v, ok := m[k]; ok {
            values = append(values, v)
            where = append(where, fmt.Sprintf("%s = ?", k))
        }
    }
    r, err := db.QueryRow("SELECT name FROM users WHERE " + strings.Join(where, " AND "), values...)
    

    プレースホルダーはアプリケーションの直接制御外のクエリの一部に使用されるため、これはSQLインジェクションの影響を受けません。

    マップキーにフィールド名が許可されていることがわかっている場合は、次を使用します。

    var values []interface{}
    var where []string
    for k, v := range m {
        values = append(values, v)
        where = append(where, fmt.Sprintf("%s = ?", k))
    }
    r, err := db.QueryRow("SELECT name FROM users WHERE " + strings.Join(where, " AND "), values...)
    



    1. 総投票数に対して1つの数を増減するための更新トリガーを作成する方法

    2. 特定のデータベースに対して最後に実行されたクエリ

    3. MicrosoftAccessの別のテーブルの値を使用して計算されたフィールド

    4. PostgreSQL正規表現の単語境界?