gpt4 book ai didi

mysql - Grails - 无法使用 Mysql 执行 SELECT WHERE

转载 作者:行者123 更新时间:2023-11-29 10:40:09 26 4
gpt4 key购买 nike

我正在尝试在 grails 中执行 SELECT WHERE 查询来实现登录页面。我不应该使用 PHP 或 Spring 进行数据验证。

user.groovy

封装loginmysql

class User {

String userName
String password

static constraints = {
userName (unique:true)
password (password:true)
}
}

userController.groovy

package loginmysql

class UserController {

def UserService

def index() {
UserService.createTables();
//UserService.insertToTables() // upon Inserting, must not be inserted twice
}

def login() {
UserService.searchLoginInput(params.userName,params.password)
redirect(action: "index") // return to index page again and display login message*/
}

}

userService.groovy

package loginmysql

import grails.transaction.Transactional
import groovy.sql.Sql

@Transactional
class UserService {

def dataSource

def searchLoginInput(String input_user, String input_pass) {
def sql = new Sql(dataSource)
def sql2 = new Sql(dataSource)
int userNum = 0
sql.eachRow('SELECT userName FROM users WHERE userName=$input_user') { row ->
if (input_user == row.userName) {
sql2.eachRow('SELECT password FROM users WHERE password=$input_pass') { row2 ->
if (input_pass == row2.password) {
flash.message = " login succeded!!!"
session.user = input_user // keep info on who connected
userNum++
} else {
flash.message = "login failed!!!"
}
}
}
}
if (userNum==0) flash.message = "Username not found!!!"
}

def createTables(){
def sql = new Sql(dataSource)
sql.execute '''
CREATE TABLE IF NOT EXISTS users (
userId INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL,
userName VARCHAR(50) UNIQUE,
password VARCHAR(100)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
'''
}

def insertToTables(){
def sql = new Sql(dataSource)
def params = ['vagg77', 'pass']
sql.execute 'INSERT INTO users (userName, password) VALUES (?, ?)', params
params = ['mary', 'pass']
sql.execute 'INSERT INTO users (userName, password) VALUES (?, ?)', params
}
}

以下是页面登录时发生的情况:

enter image description here

如果我在 searchLoginInput() 中添加 println() 函数,那么我会看到这些值已正确从我的 Controller 发送到我的服务

enter image description here

这就是我遇到的确切错误:

enter image description here

我想知道我输入的查询在 MySQL 中是否有错误的语法,因此我尝试在 mysql 控制台上执行该查询。

数据库条目

enter image description here

控制台中的 MySQL 查询

enter image description here

最佳答案

Groovy String(或 GString)中的变量替换要求您使用双引号,而不是单引号。另外,使用花括号。

因此,在您的情况下,创建 SQL 语句将如下所示:

“从用户中选择用户名,其中 userName=${input_user}”

关于mysql - Grails - 无法使用 Mysql 执行 SELECT WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com