我是Golang的新手,我正在使用PQ包进行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)
我如何解决这个问题,因为我一直在寻找解决它的问题。
答案 0 :(得分:3)
这里发生的事情是,您告诉Go,您的查询无法返回任何行(请参阅docs for Exec())
你应该使用:
答案 1 :(得分: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)
行也是错误的。