如何在go lang中使用mysql通过select查询获取行数

时间:2015-10-10 15:16:34

标签: mysql go rows

我是go lang的新人。我想从MySQL db创建一个登录验证。 我想要像PHP mysqli_num_rows($res)==1中的方法... 我尝试了len(rows)rows.Column() @ fmt.Println("No of rows are :",rows),但它赢了...... 我试过的代码......(这是一个虚拟代码)

rows, err := db.Query("select * from userLog where u_name = ? and u_pass = ?", uname,pswd)
  if err != nil {
     log.Fatal(err)
   }
   fmt.Println("No of rows are :",rows)
   defer rows.Close()

如果您有另一种用于登录验证的解决方案,请亲自建议并简要解释一下,请帮助我。

6 个答案:

答案 0 :(得分:7)

据我了解,您需要检查数据库中是否存在用户和密码。如果是这样,你可以这样做:

var isAuthenticated bool
err := db.QueryRow("SELECT IF(COUNT(*),'true','false') FROM userLog WHERE u_name = ? AND u_pass = ?", uname, pswd).Scan(&isAuthenticated)
if err != nil {
    log.Fatal(err)
} 

如果数据库包含提供的用户,则密码isAuthenticated将设置为true。

答案 1 :(得分:4)

如果您已经执行了查询float getAnswer(int x, int y) { return static_cast<float>(x) / static_cast<float>(y); } float result = getAnswer(input1, input2 ); 并且拥有db.Query("SELECT * FROM some_tbl")迭代器,那么您无法在不迭代的情况下提取行数。如您所见there nothing that returns the number of rows

所以你唯一能做的就是做一个查询来选择行数:rows

答案 2 :(得分:3)

这是一种在go中返回MySQL select的行数的一种非常有效的方法:

rows, selerr := db.Query(sql, StartDate,EndDate) // Query
                if selerr != nil { fmt.Fprint(w, selerr); return }
count := 0
for rows.Next() { count += 1 }

rows, _ := db.Query(sql, StartDate,EndDate) // Query again - no error 

答案 3 :(得分:2)

如上所述,count(*)工作正常,Scan使其更简单,例如:

func GetCount(schemadottablename string) int {
    var cnt int
    _ = db.QueryRow(`select count(*) from ` + schemadottablename).Scan(&cnt)
    return cnt 
}

当然,您可以使用where语句来“优化”计数,例如:

func GetCount(schemadottablename string, column string, value string) int {
    var cnt int
    _ = db.QueryRow(`select count(` + column + `) from ` + schemadottablename + ` where ` + column + `=?`, value).Scan(&cnt)
    return cnt 

}

答案 4 :(得分:0)

应用程序语言没有区别。使用count(*)

select count(*) as cnt
from userLog
where u_name = ? and u_pass = ?;

然后读取查询返回的值。

答案 5 :(得分:0)

仅是为了增加对该主题的了解,您是否想像有一个通用的菜谱,可以将任何select语句表达为select count(*),这可能在分页事务中很有用,并希望对某人正在寻找的内容有用:

package main

import (
    "fmt"
    "regexp"
)

const sample = `select a,b,c
from <table>
where <conditions>`

func main() {
    var re = regexp.MustCompile(`(select)\b.[\s\S]*(from[\s\S]*)`)
    s := re.ReplaceAllString(sample, "$1 count(*)\n$2")
    fmt.Println(sample + "\n")
    fmt.Println(s)
}

https://play.golang.org/p/29Iiv1Ta-0_D