首頁 >後端開發 >Golang >學習Go 語言操作 MySQL 之 預處理

學習Go 語言操作 MySQL 之 預處理

coldplay.xixi
coldplay.xixi轉載
2020-07-02 17:42:203941瀏覽
訂閱本站

學習Go 語言操作 MySQL 之 預處理

預處理預處理是MySQL 為了防止客戶端頻繁要求的技術,是對相同處理語句進行預先載入在MySQL 中,將操作變數資料以佔位符來代替,減少對MySQL 的頻繁請求,使得伺服器高效運作。

在這裡客戶端並不是前台後台之間的C/S 架構,而是後台程式對資料庫伺服器進行操作的C/S 架構,這樣就可以簡要地理解了後台程式作為Client 向MySQL Server 請求並處理了結果。

相關學習推薦:

GO語言教學

#普通SQL 執行處理過程:

#在客戶端準備SQL 語句;

發送SQL 語句到MySQL 伺服器;在MySQL 伺服器執行該SQL 語句;

    伺服器將執行結果傳回給客戶端。
  1. 預處理執行處理程序:
  2. 將SQL 分割為
結構部分與資料部分

; 在執行SQL 語句的時候,先將前面相同的指令和結構部分傳送給MySQL 伺服器,讓MySQL 伺服器事先進行一次預處理(此時並沒有真正的執行SQL 語句);

    #為了確保SQL 語句的結構完整性,在第一次傳送SQL 語句的時候將其中可變的資料部分都用一個資料佔位符來表示;
  1. #然後把資料部分傳送給MySQL 服務端,MySQL 服務端對SQL 語句進行佔位符號替換;
  2. MySQL 服務端執行完整的SQL 語句並將結果傳回給客戶端。
  3. 預處理優點
  4. 預處理語句大大
減少了分析時間

,只做了一次查詢(雖然語句多次執行);綁定參數

減少了伺服器頻寬
    ,只需發送查詢的參數,而不是整個語句;
  • 預處理語句針對** SQL注入**是非常有用的,因為參數值發送後使用不同的協議,保證了資料的合法性。
  • Go 語言實作
  • 在Go 語言中,使用
  • db.Prepare()
方法實作預處理:

func (db *DB) Prepare(query string) (*Stmt, error)
Prepare 執行預處理SQL 語句,並傳回Stmt 結構體指針,進行資料綁定操作。

查詢作業使用

db.Prepare() 方法宣告預處理SQL,使用stmt.Query()

將資料取代佔位符進行查詢,更新插入、刪除操作使用

stmt.Exec()

來操作。

預處理查詢範例

// 预处理查询数据func prepareQuery() {
    sqlStr := "SELECT id,name,age FROM user WHERE id > ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    rows, err := stmt.Query(1)
    if err != nil {
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    defer rows.Close()

    for rows.Next() {
        var u user
        err := rows.Scan(&u.id, &u.name, &u.age)
        if err != nil {
            fmt.Printf("scan data failed, err:%v\n", err)
            return
        }
        fmt.Printf("id:%d, name:%s, age:%d\n", u.id, u.name, u.age)
    }}

預處理更新範例

// 预处理更新数据func prepareUpdate() {
    sqlStr := "UPDATE user SET age = ? WHERE id = ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    _, err = stmt.Exec(18, 2)
    if err != nil {
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    fmt.Printf("prepare update data success")}

#預處理插入範例

// 预处理更新数据func prepareUpdate() {
    sqlStr := "UPDATE user SET age = ? WHERE id = ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    _, err = stmt.Exec(18, 2)
    if err != nil {
        fmt.Printf("exec failed, err:%v\n", err)
        return
    }
    fmt.Printf("prepare update data success")}

預處理刪除範例

// 预处理删除数据func prepareDelete() {
    sqlStr := "DELETE FROM user WHERE id = ?"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        fmt.Printf("prepare sql failed, err:%v\n", err)
        return
    }
    result, err := stmt.Exec(3)
    n, err := result.RowsAffected()
    if err != nil {
        fmt.Printf("delete rows failed, err:%v\n", err)
        return
    }
    if n > 0 {
        fmt.Printf("delete data success")
    } else {
        fmt.Printf("delete data error")
    }

以上是學習Go 語言操作 MySQL 之 預處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除