MySQL - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法 - phpMyAdmin
Posted
技术标签:
【中文标题】MySQL - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法 - phpMyAdmin【英文标题】:MySQL - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax- phpMyAdmin 【发布时间】:2020-02-22 14:17:06 【问题描述】:我在 phpMyAdmin 的存储过程下面运行:
DELIMITER //
CREATE PROCEDURE usp_ForgotPassword (
-- Add the parameters for the stored procedure here
p_mobileNo VARCHAR(50),
p_emailId VARCHAR(300),
p_password VARCHAR(300),
p_otp VARCHAR(50),
p_appInstanceCode CHAR(36))
BEGIN
DECLARE v_IsOTPValid TINYINT DEFAULT NULL;
SET v_IsOTPValid = NULL;
DECLARE v_userCode CHAR(36);
IF (v_IsOTPValid = 1)
THEN
IF EXISTS(SELECT * FROM OTP WHERE otp = p_otp AND mobileNo = p_mobileNo)
THEN
SET v_userCode = (SELECT userCode FROM UserLogin WHERE userName = p_emailId);
UPDATE UserLogin UL
SET password = p_password
WHERE userName = p_emailId AND userCode = v_userCode;
-- Delete the verified OTP
DELETE FROM OTP WHERE otp = p_otp AND mobileNo = p_mobileNo;
DECLARE v_Token CHAR(36);
INSERT INTO Token (createdAt, updatedAt,code,userCode,appInstanceCode,deviceIMEI,deviceName)
VALUES (NOW(),NOW(),v_Token,v_userCode,p_appInstanceCode,NULL,NULL);
SELECT 200 code, 'Password changed succesfully' as message,v_Token;
ELSE
SELECT 400 as code, 'Invalid OTP or Mobile No' as message,v_Token;
END IF;
ELSE
SELECT 401 as code, 'OTP expired' as message,v_Token;
END IF;
END
//
delimiter ;
但它一直显示错误:
1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'DECLARE v_IsOTPValid TINYINT DEFAULT NULL; 附近使用的正确语法; 设置 v_IsOTPValid = NULL; DECL' 在第 9 行
我试过了:
Is declare in mysql giving syntax error?
和
Mystery error in CREATE PROCEDURE in MariaDB/MySQL
但是这些答案都没有帮助!
【问题讨论】:
【参考方案1】:在所有 DECLARE 语句结束之前都有一个 SET..
根据official documentation
,将所有声明放在集合或任何其他语句之前:
BEGIN
DECLARE v_IsOTPValid TINYINT DEFAULT NULL;
DECLARE v_userCode CHAR(36);
DECLARE v_Token CHAR(36);
SET v_IsOTPValid = NULL;
【讨论】:
遇到另一个错误:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DECLARE v_userCode CHAR(36);
尝试将所有声明移到集合之前
只是建议查看您的代码..将 v_IsOTPValid 设置为 null 并检查 if is =1 对我来说似乎没有意义..
是的,有一个标量函数可以为其设置值,但现在(对于问题)我删除了它
顺便说一句谢谢!即使在没有人指出这一点的其他类似问题上,我也无法找到任何有关它的文档!以上是关于MySQL - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法 - phpMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章
SQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用
您的 SQL 语法有错误;检查与您的 MySQL 服务器 PYTHON 对应的手册
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法解决方案:
“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法错误”Hibernate 4 [重复]