2016-09-28 12 views
5

Golang'da çok yeniyim ve postgres için PQ paketini kullanıyorum. Ne yapmaya çalışıyorum yinelenen e-postalar önlemek olduğunu, bu yüzden bir kullanıcı e-posta Ben böyle That I Can hale nasıl yukarıda benim kodudur veritabanıGolf bildirimleri sorgulama numarasından nasıl geri döndürebilirim

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") 
    } 

zaten olmadığını denetler bir sorgu var Ben hatayı olsun bunu çalıştığınızda bu

if rows >0 { ...} 

gibi kontrol

geçersiz operasyon: satırlar> 0 (uyumsuz türleri sql.Result ve int)

Şu an bu sorunu gidermek için etrafa baktığımda bu sorunu nasıl çözebilirim? - rows.Err() da hatalarını denetlemek için çağrılmalıdır

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 dönecektir hiçbir veri varsa:

cevap

1

the documentation baktığımızda, sen rows.Next() arayıp Başarılı olmadığını kontrol etmek gerekir.

Ayrıca the other answer from BJ Black'a da dikkat edin - check_duplicate_emails.Exec(email) satırı da yanlıştır.

Burada oluyor size sorgusu herhangi satırları iade edilmeyecektir Git söyledim olmasıdır
+0

Bunun için teşekkürler – user1591668

3

Muhtemelen kullanmalıdır (docs for Exec() bakınız) ya:

  • QueryRow ve Scan() bir arada (QueryRow örneğinde iyi bir tane var) veya
  • a "0 ... 'dan ..." ... ... 'u olmadan Query numaralı sorguyu seçin ve satırlara bakın.Sonraki() ilk vardı kürek çekmek.
İlgili konular