2016-09-28 26 views
5

我是非常新的Golang和我使用PQ包postgres。我所試圖做的是防止重複的郵件,所以我有檢查,看看如果用戶郵箱已經在數據庫高爾夫postgres我怎麼能從查詢返回計數編號

check_duplicate_emails, err := db.Prepare("select count(*) from profiles where email=$1") 
    rows, err := check_duplicate_emails.Exec(email) 

     if rows != nil { 
     fmt.Fprintf(w,"Duplicate Email") 
    } 

這就是我上面的代碼我怎樣才能使它這樣我可以查詢檢查這樣

if rows >0 { ...} 

,當我嘗試這樣做,我得到的錯誤

無效操作:行> 0(類型不匹配sql.Result和INT)

我怎樣才能解決這個問題,因爲我一直在尋找解決它現在有點。

回答

1

看着the documentation,你需要調用rows.Next()並檢查它是否成功:

if rows.Next() { 
    fmt.Fprintf(w, "Duplicate Email") 
} 
else if rows.Err() { 
    fmt.Fprintf(w, "Oops, error %s", rows.Err()) 
} 
else { 
    fmt.Fprintf(w, "OK, unique email address") 
} 

如果沒有數據,rows.Next()將返回nil - rows.Err()也應該被要求檢查錯誤。

請注意the other answer from BJ Black - check_duplicate_emails.Exec(email)這一行也是錯誤的。

+0

謝謝你的 – user1591668

3

這裏發生的事情是,你告訴轉到您的查詢將不會返回任何行(見docs for Exec()

你應該使用兩種:

  • QueryRowScan()組合(例如在QueryRow是一個好的),或
  • 一個「select somecol from ... where ...」沒有計數(*)查詢與Query並看看rows.Next()看看是否有第一個行。