使用MySQL存储过程与Javascript对象

时间:2016-04-25 22:51:40

标签: javascript mysql node.js stored-procedures

我希望获得有关如何传递mySQL存储过程Javascript表单数据以在查询中用作参数的指导。

我一直在寻找关于如何使用mySQL存储过程和javascript表单数据作为参数的答案。

这就是我到目前为止:

    var first_name = req.body.firstName,
        last_name= req.body.lastName,
        email= req.body.email,
        password= req.body.password,
        gpa= req.body.gpa,
        major = req.body.major,
        classification= req.body.classification;
    var query = connection.query("CALL new_student()", function (err, result) {
        if (err) {
            res.send(err);
        }
        res.json(result);
    })

这是存储过程:

     CREATE DEFINER=`root`@`localhost` PROCEDURE `new_student`(IN first_name VARCHAR(45), 
IN last_name VARCHAR(45), IN email VARCHAR(45), IN password VARCHAR(45), IN gpa DECIMAL(3,2),
 IN major INT(10), IN classification VARCHAR(45))
BEGIN
INSERT INTO users (first_name, last_name, email, password)
 VALUES (first_name, last_name, email, password);
INSERT INTO student (user_id, gpa, major, classification)
 VALUES (LAST_INSERT_ID(),gpa, major, classification);
END

我的目的是获取变量或封装变量的Javascript对象,并通过“new_student()”传递它们。

我知道这看似微不足道。我正在学习如何使用Javascript存储过程。

1 个答案:

答案 0 :(得分:2)

您需要为函数提供参数。如果您正在使用node-mysql-native,则可以使用类似预准备语句的语法提供参数。

var query = connection.query("CALL new_student(?, ?, ?, ?, ?, ?, ?)", [first_name, last_name, email, password, gpa, major, classification], 
    function (err, result) {
    if (err) {
        res.send(err);
    }
    res.json(result);
})

有关此内容的详情,请参阅Preventing SQL injection in Node.js