在Sequel Pro中编写用于哈希密码的过程时语法错误

时间:2018-11-21 18:06:53

标签: mysql sequelpro

在尝试创建此过程以哈希密码时,我一直收到语法错误。不确定为什么会说语法错误。

我一直遇到的错误是:

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获取在'@pFirstName varchar(255)附近使用的正确语法,     @pLastName varchar(255),     @pEmail varchar(255),     @'在第2行

CREATE PROCEDURE `Users`
@pFirstName varchar(255),
@pLastName varchar(255),
@pEmail varchar(255),
@pPassword NVARCHAR(50),
@pType int(11),
@pCreatedAt datetime,
@pUpdatedAt datetime,
@pUser_type enum('admin','project-manager','lawyer','anonymous-client','client','external-client','intake-bot'),
@pUndashPassword NVARCHAR(50),
@responseMessage NVARCHAR(250) OUTPUT

AS
BEGIN
SET NOCOUNT ON

BEGIN TRY

    insert into `Users` (`firstName`,`lastName`,`email`, `password`,`type`,`createdAt`,`updatedAt`,`user_type`, `PasswordHash`)
    VALUES(@pFirstName, @pLastName, @pEmail, @pPassword, @pType, @pCreatedAt, @pUpdatedAt, @pUser_type, HASHBYTES('SHA2_512', @pUndashPassword))

    SET @responseMessage='Success'

END TRY
BEGIN CATCH
    SET @responseMessage=ERROR_MESSAGE() 
END CATCH

END

2 个答案:

答案 0 :(得分:1)

在MySQL中声明在SP中使用的变量时,您将需要采用以下方式:

STORE PROCEDURE someThing(in Var1 INT, in Var2 VARCHAR(20)....)

我的意思是你需要:

  • 确定元素是一个input值,一个outpu值还是两个inputouput
  • 变量名
  • 数据类型将存储在此变量中

现在这些是您SP的参数,但是如果您在SP内需要变量,那么正确的正弦值为:

DECLARE anotherValue INT DEFAULT 10;

我的意思是您将需要:

  • DECLARE声明
  • 变量名称
  • 将存储数据类型
  • 您可以选择设置DEFAULT

检查此示例

DELIMITER //
CREATE PROCEDURE EXAMPLE1(IN idUser INT)
BEGIN
    DECLARE Total INT;
    SELECT COUNT(*)
    INTO Total 
    FROM users 
    WHERE users.id = idUser;
    SELECT Total;
END //
DELIMITER ;

以这种方式调用后:

CALL EXAMPLE1(1);

Reference

答案 1 :(得分:0)

您似乎已经习惯了Microsoft SQL Server语法。

MySQL与Microsoft SQL Server是不同的SQL实现。 MySQL具有自己的语法,这是不同的。我注意到您的示例中有很多事情在MySQL中不起作用。我尚未测试您的程序是否完整,因此,请仅将其视为错误的示例。

您应该阅读一些有关存储过程语法的MySQL文档。

该手册仅供参考。所有语法都有文档记录,但它不是面向任务的文档,因此仅从手册中学习MySQL存储过程就很困难。

还有一本O'Reilly的书,它现在已经有点老了,但无疑仍然很有帮助,因为MySQL存储过程的功能没有太大变化:MySQL Stored Procedure Programming