代码之家  ›  专栏  ›  技术社区  ›  David

NodeJS MySQL-准备时出现异常

  •  0
  • David  · 技术社区  · 5 年前

    我想做的是:

    1. 如果存在,请删除该过程
    2. 创建过程
    3. 在过程内部,准备insert语句
    4. 在过程内部,执行语句
    5. 在过程内部,取消分配该过程

    // optionally drop the sproc and create the create user SPROC
    con.query(`USE ${config.database.name}`, function(err, result) {
        if (err) {
            con.rollback(function() {
                throw err;
            });
        }
    });
    con.query(`DROP PROCEDURE IF EXISTS ${config.database.name}.sproc_create_user`, function(err, result) {
        if (err) {
            con.rollback(function() {
                throw err;
            });
        }
    });
    con.query(`
        CREATE PROCEDURE sproc_create_user (
            paramEmail VARCHAR(64),
            paramPassword VARCHAR(64)
        )
        BEGIN
            SET @generatedSalt = (SELECT LEFT(SHA(RAND()), 8));
            SET @sql = 'INSERT INTO User (
                Email,
                PasswordHash,
                PasswordSalt
            ) VALUES (
                ?,
                ?,
                ?
            );'
            PREPARE createUserStatement FROM @sql;
            EXECUTE createUserStatement USING @paramEmail, SHA(CONCAT(@generatedSalt, @paramPassword)), @generatedSalt;
            DEALLOCATE PREPARE createUserStatement;
        END;`, function(err, result) {
        if (err) {
            con.rollback(function() {
                throw err;
            });
        }
    });
    

    当我尝试执行此代码时,会出现以下SQL异常:

    您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本

    我试着浏览文档,但是存储过程的信息很简单(至少可以说),并且没有关于PREPARE…EXECUTE…DEALLOCATE的信息。

    0 回复  |  直到 5 年前
    推荐文章