javascript 在Node.js上创建服务器

8cdiaqws  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(203)

我在Node.js上创建了一个服务器。我使用SQL Server。我想创建一个SQL查询,通过给定的输入找到图书。当我写我的查询错误是:
名称:“错误”,处理程序名称:'有关错误消息',编号:207,国家:1、班级:16、留言:“列名称”%@param4%“无效。",服务器名称:'桌面-PQSULQS\SQLEXPRESS',过程名称:“”,行号:1
这是一个搜索方法:

async function searchBook(input){
    let result = await sql.query `SELECT * FROM dbo.Books WHERE Title = ${input} OR Kind = ${input} OR Author = ${input} OR Title LIKE "%${input}%"` ;
    return result.recordset;
}

我试着解决这个问题。但是我不知道为什么服务器抛出这个异常。有什么建议吗?

eoxn13cs

eoxn13cs1#

共享代码示例的主要问题是,如果您将模板文本与静态值一起使用,则每个nvarchar列值都应该包含在单引号''中。
则代码将如下所示:

async function searchBook(input){
    let result = await sql.query(`SELECT * FROM dbo.Books WHERE Title = '${input}' OR Kind = '${input}' OR Author = '${input}' OR Title LIKE '%${input}%'`);
    return result.recordset;
}

但是这个代码有sql注入漏洞,所以要防止它。使用参数来克服这个问题。
所以你的代码如下所示:

async function searchBook(input){
    let request = new sql.Request();
    request.input('input', sql.NVarChar, input);
    let result = await request.query(`SELECT * FROM dbo.Books WHERE Title = @input OR Kind = @input OR Author = @input OR Title LIKE '%' + @input + '%'`);
    return result.recordset;
}
fv2wmkja

fv2wmkja2#

我认为问题出在建设的要求上。
参数的使用应该可以解决这个问题。

async function searchBook(input){
    let result = await sql.query`SELECT * FROM dbo.Books WHERE Title = @title OR Kind = @kind OR Author = @author OR Title LIKE "%" + @title + "%"`,
    {
        params: {
            title: input,
            kind: input,
            author: input
        }
    };
    return result.recordset;
}

相关问题