用于登录的MySQL函数,返回1或0
我试图在一个连接到mySQL服务器的网站上实现登录功能。我有问题使功能的工作,但是用于登录的MySQL函数,返回1或0,mysql,Mysql,我试图在一个连接到mySQL服务器的网站上实现登录功能。我有问题使功能的工作,但是 CREATE FUNCTION login_function (IN nick varchar(10), IN pw varchar(10)) RETURNS NUMBER(1) DETERMINIS BEGIN DECLARE v_result NUMBER(1); SET v_result=0; SELECT COUNT(username) INTO v_result FROM login WHERE u
CREATE FUNCTION login_function
(IN nick varchar(10),
IN pw varchar(10))
RETURNS NUMBER(1)
DETERMINIS
BEGIN
DECLARE v_result NUMBER(1);
SET v_result=0;
SELECT COUNT(username)
INTO v_result
FROM login
WHERE username=nick
AND password=pw;
RETURN v_result;
END;
##
信息:
1064-您的SQL语法有一个错误:请查看与您的MySQL服务器版本对应的手册,以获得正确的语法
在nick varchar(10)中,
在pw varchar(10))
返回编号(1)
决定论
开始
在2号线
数据库的外观:
对于函数,因为所有参数都必须在参数中。因此,函数的定义是正确的:
CREATE FUNCTION login_function
(nick varchar(10),
pw varchar(10))
...
最后一个
结束后也不需要分号,而且deterministis
应该是DETERMINISTIC
,而数字(1)
应该是tinyint
或bool您有几个问题。首先,您不应该在参数的
关键字中包含。参数在
中暗示为
您的下一个问题是MySQL正在读取您的代码>并思考“我已经到了语句的末尾”。因此,它试图在返回之前只解析函数的一部分。您需要将delimeter设置为其他值,以便它知道“处理整个块”。以下是我在控制台中尝试这两种方法时发生的情况:
mysql> create function foo (IN i int, IN j int) returns int BEGIN
-> declare q int;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN i int, IN j int) returns int BEGIN
declare q int' at line 1
mysql> create function foo (i int, j int) returns int BEGIN declare q int;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> create function foo (IN i int, IN j int) returns int begin return i*j; end //
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN i int, IN j int) returns int begin return j; end' at line 1
mysql> DELIMITER //
mysql> create function foo (i int, j int) returns int
-> BEGIN
-> declare q int;
-> SET q = i*j;
-> return q;
-> end;
-> //
Query OK, 0 rows affected (0.01 sec)
您还有一个数据类型NUMBER
。这应该是整数变体(例如,tinyint
,或int(1)
)或布尔值之一
最后,在函数创建中插入了某种关键字DETERMINIS
。我以前在任何MySQL文档中都没有看到过。(正如shadow指出的,它应该是确定性的
…我承认我错过了这一点)。“您的SQL语法有错误”您在声明函数之前没有更改分隔符。顺便说一句-存储明文密码不是一个好主意。您确定是上面的查询导致了问题吗?似乎上面没有出现DETERMINIS
,pw varchar(10)中也没有出现@cwallenpole Fixed,没有帮助:(更新了一点帖子,有一些语法错误,还编辑了一点错误消息。将delimeter更改为“##”。还删除了“IN”现在我得到:#1064-您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“NUMBER(1)DETERMINIS BEGIN DECLARE v#u result NUMBER(1)附近使用的正确语法;设置v_结果=0;选择“在第行”4@Jeppezon什么是关键词deterministis
?@cwallenpole它应该是deterministic
,正如我在回答中指出的:)@Shadow yes…明白了。我被困在了“那是荷兰语还是什么?他可能试图翻译一个关键词,但失败了吗?他会尝试翻译什么关键词?”的旁注上:DETERMINIS
是世界语中的一个词。在中删除,并将delimeter改为“##”。删除
中的只会使您摆脱代码中提到的特定语法错误。是的,当我更改为tinyint时,它也工作得很好。现在,我创建了函数并尝试通过以下方式调用它:执行login_函数(admin,admin);我得到语法错误?'admin','admin'->您想传递字符串吗