Задать вопрос

Как подставить значение в строку?

Использую пакет для бд https://github.com/ziutek/mymysql
есть функция

func new_query(Query string) {
        db := mysql.New("tcp", "", "127.0.0.1:3306", "root", "12345", "test") 
        err := db.Connect() 
        defer db.Close()
        if err != nil {
            log.Println("Не удалось подключиться к базе данных")  
            return
        } 
        stmt, err := db.Prepare(Query)
        _, err = stmt.Run()
        if err != nil {
            log.Println("Не удалось выполнить запрос")  
            return
        }
    }

Есть код на golang

Name string="Название"
    CreatedBy int=777 
    query string ="insert into table(Name,CreatedBy) values (?,?)" //????
    new_query(query)


Нужно получить `query ="insert into table(Name,CreatedBy) values ("Название",777)"`
Я пробовал подставлять %s , но что-то не разберусь
На оф сайте предлагает сперва делать stmt, err := db.Prepare("insert into X values (?, ?)") , но я хочу сделать универсальную функцию, которой даёшь sql текст, а она его выполняет.А тут,фактически никакого db.Prepare нет-я просто передал текст,который может быть с sql инъекцией...
Если в функцию передать запрос("со вставками"-куда нужно будет подставить) и массив с параметрами, но в каждом запросе может быть своё количество параметров- как их тода перебрать?

И ещё :можно ли с помощью регулярных выражений как-то убрать из string типа спец символы или как-то экранировать, что б не было sql инъекций?

Мне что-то вообще кажется-я изобретаю велосипед)))
  • Вопрос задан
  • 271 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 3
sim3x
@sim3x
https://github.com/ziutek/mymysql#type-mapping
rows, res, err := db.Query("select * from X where id > %d", id)
Ответ написан
Комментировать
winordie
@winordie
Лучшая документация -- исходники
query := fmt.Sprintf("insert into table(Name,CreatedBy) values (%s, %d)", Name, CreateBy)
Ответ написан
Комментировать
@TwoRS Автор вопроса
Спасибо. Это работает. Я просто добавлю ещё ответ-конкретно под мой вопрос
func new_query(Query string, args ...interface{}) {
    db := mysql.New("tcp", "", "127.0.0.1:3306", "root", "12345", "test")

    err := db.Connect()
    if err != nil {
        log.Println("Не удалось подключиться к базе данных")
        return
    }
    defer db.Close()

    stmt, err := db.Prepare(Query)
    _, err = stmt.Run(args...)
    if err != nil {
        log.Println("Не удалось выполнить запрос")
        return
    }
}

Использование:

Name := "Название"
CreatedBy := 777 
query := "insert into table(Name,CreatedBy) values (?,?)"
new_query(query, Name, CreatedBy)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы