如何通过使用MySQL的选择查询获取行数

Soh*_*ikh 6 mysql rows go

我是golang的新手。我想从MySQL数据库创建登录验证。我想要一个类似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()
Run Code Online (Sandbox Code Playgroud)

如果您还有其他用于登录验证的解决方案,请提出建议并简要解释一下。请帮我。

小智 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)
} 
Run Code Online (Sandbox Code Playgroud)

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


Sal*_*ali 5

如果您已经执行了查询db.Query("SELECT * FROM some_tbl")并拥有一个rows迭代器,那么您不进行迭代就无法提取行数。如您所见,没有什么可以返回行数

因此,您唯一可以做的就是查询以选择行数: db.Query("SELECT COUNT(*) FROM some_tbl")


小智 5

这是在 go 中返回 MySQL 选择中的行数的一种相当有效的方法:

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 
Run Code Online (Sandbox Code Playgroud)