[解決済み] "sql: 結果セットに行がありません"
2022-02-19 11:10:22
質問
HTML フォームを通じて Go バックエンドに送信されたユーザー認証データを処理しています。私は いくつかのボイラープレート を使用して、Go をよりよく学ぶことができます。
私の問題は、次のようなものです。
func
を返します。
func (ctrl UserController) Signin(c *gin.Context) {
var signinForm forms.SigninForm
user, err := userModel.Signin(signinForm)
if err := c.ShouldBindWith(&signinForm, binding.Form); err != nil {
c.JSON(406, gin.H{"message": "Invalid signin form", "form": signinForm})
c.Abort()
return
}
if err == nil {
session := sessions.Default(c)
session.Set("user_id", user.ID)
session.Set("user_email", user.Email)
session.Set("user_name", user.Name)
session.Save()
c.JSON(200, gin.H{"message": "User signed in", "user": user})
} else {
c.JSON(406, gin.H{"message": "Invalid signin details", "error": err.Error()})
}
}
最初の
if
文は入力の検証を行い、うまく動作します (メールが適切なメール形式でない場合はエラー、そうでない場合はエラーなし)。しかし、入力が適切に検証された場合は
else
節が起動され、以下のようなJSONが返されます。
{
error: "sql: no rows in result set",
message: "Invalid signin details"
}
関連するコードも掲載しておくと便利でしょう。
User
モデルで使用されます。
//User ...
type User struct {
ID int `db:"id, primarykey, autoincrement" json:"id"`
Email string `db:"email" json:"email"`
Password string `db:"password" json:"-"`
Name string `db:"name" json:"name"`
UpdatedAt int64 `db:"updated_at" json:"updated_at"`
CreatedAt int64 `db:"created_at" json:"created_at"`
}
//UserModel ...
type UserModel struct{}
//Signin ...
func (m UserModel) Signin(form forms.SigninForm) (user User, err error) {
err = db.GetDB().SelectOne(&user, "SELECT id, email, password, name, updated_at, created_at FROM public.user WHERE email=LOWER($1) LIMIT 1", form.Email)
if err != nil {
return user, err
}
bytePassword := []byte(form.Password)
byteHashedPassword := []byte(user.Password)
err = bcrypt.CompareHashAndPassword(byteHashedPassword, bytePassword)
if err != nil {
return user, errors.New("Invalid password")
}
return user, nil
}
を解決するにはどうすればよいのでしょうか?
sql: no rows in result set
のエラーが発生しました。
解決方法を教えてください。
コード内の操作の順序を変更する必要があります。
まず、リクエストからデータを取得するために
if err := c.ShouldBindWith(&signinForm, binding.Form); err != nil {
でデータベースからデータを取得し、その後に
user, err := userModel.Signin(signinForm)
関連
-
[解決済み] ORA-04063: ビューにエラーがあります
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】データベースへの「ネイティブ」SQL接続を使用するとはどういう意味ですか?
-
[解決済み】テキストが切り捨てられた、または1つ以上の文字がターゲットコードページで一致しない アンピボットの主キーを含む
-
[解決済み】SQL Server サブクエリが1つ以上の値を返しました。サブクエリが =, !=, <, <= , >, >= に続く場合、これは許可されません。
-
[解決済み] データ型 varchar の変換エラー
-
[解決済み] Varchar は Sum 演算子では無効です。
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] Oracle(LiveSQL)のSQL [重複]について
-
[解決済み] マルチパート識別子をバインドできなかった
-
[解決済み] MySQLのON句の不明なカラム
-
[解決済み] トリガーがコンパイルエラーで作成される