首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从函数插入到mysql数据库。api接口

将数据从函数插入到mysql数据库。api接口
EN

Stack Overflow用户
提问于 2022-12-01 16:20:24
回答 1查看 20关注 0票数 1

高级:我的程序得到一个长URL,并使它更短(比如tinyurl)。但是我在将长URL变量和shortURL变量从函数传递到mySQL数据库时遇到了问题。我已经试着在网上查过了,但是我所得到的信息与我所拥有的不太接近。我只发布了我的部分代码,完整的代码将在游乐场

代码语言:javascript
复制
var db *sql.DB            //global variable

func main(){
var db, err = sql.Open("mysql", dsn())
    if err != nil {
        fmt.Println(err.Error())
    } else {
        fmt.Printf("Connection established to MYSQL server\n%s\n", dsn())
    }
    defer db.Close()

    linkList = map[string]string{}

    http.HandleFunc("/link", addLink)
    http.HandleFunc("/hpe/", getLink)
    http.HandleFunc("/", Home)

    // Flags to pass string ip or port to WEB app
    ip := flag.String("i", "0.0.0.0", "")
    port := flag.String("p", "8080", "")
    flag.Parse()
    fmt.Printf("Web application listening on %s \n", net.JoinHostPort(*ip, *port))
    log.Fatal(http.ListenAndServe(net.JoinHostPort(*ip, *port), nil))
}

函数,该函数创建短url。每次调用此函数时,它都会生成链接。

代码语言:javascript
复制
func addLink(w http.ResponseWriter, r *http.Request) {
    log.Println("Add Link")
    key, ok := r.URL.Query()["ik"]
    if ok {
        if !validLink(key[0]) {
            w.WriteHeader(http.StatusBadRequest)
            fmt.Fprintf(w, "Could not create shortlink need absolute path link.")
            return
        }
        log.Println(key)
        if _, ok := linkList[key[0]]; !ok {
            genString := randomString(5)
            linkList[genString] = key[0]
            w.Header().Set("Content-Type", "text/html")
            w.WriteHeader(http.StatusAccepted)

        linkString := fmt.Sprintf("<a href=\"hpe/%s\">hpe/%s</a>", genString, genString)
            fmt.Fprintf(w, "Added shortlink\n")
            fmt.Fprintf(w, linkString)
            return
            // database function

            defer db.Close()
            s:
    result, err := db.Exec("insert into Url (LongUrl, ShortUrl) value(?,?);",genString,linkString)
            if err != nil {
                fmt.Print(err.Error())
            } else {
                _,err:=result.LastInsertId()
                
            }

            

        }
        w.WriteHeader(http.StatusConflict)
        fmt.Fprintf(w, "Already have this link")
        return
    }
    w.WriteHeader(http.StatusBadRequest)
    fmt.Fprintf(w, "Failed to add link")
    return
}
代码语言:javascript
复制
func getLink(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path
    log.Println("Get Link:", path)
    pathArgs := strings.Split(path, "/")
    if len(pathArgs[2]) < 1 {
        w.WriteHeader(http.StatusNotFound)
        http.Redirect(w, r, "0.0.0.0:8080", http.StatusTemporaryRedirect)
        return
    }
    log.Printf("Redirected to: %s", linkList[pathArgs[2]])
    http.Redirect(w, r, linkList[pathArgs[2]], http.StatusTemporaryRedirect)
    //fmt.Printf("all %s", linkList)
    return
}

我的期望是,当func被调用时,从长和短url生成的信息就会像在代码中那样被放入数据库。

EN

回答 1

Stack Overflow用户

发布于 2022-12-04 00:44:15

如果问题是在调用addLink时没有向db添加任何内容,那么问题看起来是因为在创建和打印linkString var之后,以及在调用db.Exec之前,addLink中有一个返回语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74645024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档