如何使用Nodejs使查询参数化

x33g5p2x  于 2023-04-20  发布在  Node.js
关注(0)|答案(1)|浏览(141)

我正在使用Nodejs和expressjs,现在我使用“插入查询”,但我想让查询更安全,我想使用“connection.query”(paramerized query),我怎么能做到这一点?我还想知道如何在expressjs中获得“最后插入的id”?这是我目前的代码

static async addServiceDetail(userId,serviceId,genderTypeId,price,serviceName)
    {
        const sql = `SELECT id from servicesdetail WHERE userId='${userId}' AND  serviceId='${serviceId}' AND genderTypeId='genderTypeId'`;
        const [rows, fields] = await pool.execute(sql);
        if(rows<1)
            {
                const sql2 = `INSERT INTO servicesdetail (userId, serviceId, genderTypeId,price,serviceName) VALUES ("${userId}", "${serviceId}", "${genderTypeId}", "${price}","${serviceName}")`;
                console.log('query is '+ sql);
               const datass = await pool.execute(sql2);
                console.log('last inserted id is ' +datass.insertId);
                
            }
        else
            {
                console.log('already exist');
            }   
    }
a6b3iqyw

a6b3iqyw1#

假设您使用的是节点的mysql2驱动程序,可以按如下方式传递参数:
查询将如下所示:

const resultSelect = await pool.execute(`SELECT id from servicesdetail WHERE userId = ? AND  serviceId = ? AND genderTypeId='genderTypeId'`,[userId, serviceId])

插入内容如下所示:

const resultInsert = await pool.execute(`INSERT INTO servicesdetail (userId, serviceId, genderTypeId,price,serviceName) VALUES (?, ?,  ?, ?, ?)`,[userId, serviceId, genderTypeId, price, serviceName]);

对于获得最后标识符的情况,可以通过查询:

SELECT LAST_INSERT_ID(ID) From servicesdetail;

但是需要冷静的阅读文档,看看表结构是否有带auto_increment的ID,如果标识符没有auto_increment可能就不行了,另外还有观察说明文档本身告知“如果使用单个INSERT语句插入多行LAST_INSERT_ID()只返回为插入的第一行生成的值。这样做的原因是为了能够在其他服务器上轻松地重现相同的INSERT语句。"。
希望我能帮上忙;D

相关问题