用于登录的MySQL函数,返回1或0

用于登录的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

我试图在一个连接到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 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'->您想传递字符串吗