2016-09-28 3 views
5

나는 Golang을 매우 신중하게 사용하고 있으며 포스트그레스에 PQ 패키지를 사용하고 있습니다. 내가 뭘하려고 중복 이메일을 방지, 그래서 사용자의 이메일은 내가 그런 내가 할 수있는 것을 만들 수있는 방법 위의 내 코드 데이터베이스Golfing 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)

어떻게 해결할 수 있습니까? 지금 당장이 문제를 해결하기 위해 살펴 보았습니다. - rows.Err() 또한 오류를 확인하기 위해 호출해야

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가 반환됩니다 데이터가없는 경우 :

답변

1

the documentation 보면, 당신은 rows.Next()를 호출하고 성공하는지 확인해야합니다.

참고 the other answer from BJ Black - check_duplicate_emails.Exec(email) 줄도 잘못되었습니다.

여기에서 일어나고있는 것은 당신이 당신의 쿼리가 행을 반환하지 않습니다 이동을 말 했어요 점이다
+0

고맙습니다. – user1591668

3

당신은 아마 사용해야합니다 (docs for Exec() 참조) 중 하나를

  • QueryRowScan()의 조합 (QueryRow의 예가 좋습니다) 또는
  • "선택 somecol from ... where ..."없이 Query의 수 (*) 쿼리와 행을 봅니다. 첫 번째가있었습니다. 행.
관련 문제