私は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()
ログイン確認の目的で別の解決策がある場合は、それを簡単に提案して説明してください。親切に私を助けてください。
私が理解しているように、ユーザーとパスワードがデータベースに存在するかどうかを確認する必要があります。もしそうなら、あなたはすることができます:
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に設定されます。
クエリdb.Query("SELECT * FROM some_tbl")
をすでに実行していて、rows
イテレータがある場合は、それを反復処理せずに行数を抽出することはできません。ご覧のとおり 行数を返すものはありません 。
したがって、実行できる唯一のことは、行数を選択するクエリを作成することです。db.Query("SELECT COUNT(*) FROM some_tbl")
これは、GoでMySQLselectの行数を返すかなり効率的な方法です。
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
前述のように、count(*)は正常に機能し、スキャンを使用するとさらに簡単になります。例:
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
}
アプリケーションの言語に違いはありません。 count(*)
を使用します:
select count(*) as cnt
from userLog
where u_name = ? and u_pass = ?;
次に、クエリが返す値を読み取ります。
この主題にいくつかの洞察を追加するために、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)
}