我是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。
如果您已经执行了查询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)