如何在节点js中将参数传递给mssql查询

sid*_*diq 3 mysql sql-server node.js

我正在将应用程序的数据库从 MySQL 更改为 MSSQL。我为 MySQL 数据库发送如下参数。

var sql = require('./db.js');
sql.query("select * from table where field1 = ? or field2 = ? ", [field1val, field2val], function (error, results) {
   if(error){
       //handle error
   }
   else{
      //handle the results
   } 
}
Run Code Online (Sandbox Code Playgroud)

如何在 MSSQL 中做到这一点,或者甚至可以这样做?(我正在使用mssql模块)。

存储过程是唯一的实现方式吗?如果是这样,如何在 Nodejs mssql 模块中做到这一点?

如果我们无法发送参数(自动转义 mysql 中的字符串),在 SQL Server 中运行查询的最佳实践是什么?

KZa*_*der 11

我做参数化的 SQL 查询是这样的:

var sql = require('mssql');
var myFirstInput = "foo bar";
var mySecondInput = "hello world";

sql.input('inputField1', sql.VarChar, myFirstInput);
sql.input('inputField2', sql.VarChar, mySecondInput);

sql.query("SELECT * FROM table WHERE field1 = @inputField1 OR field2 = @inputField2")
.then(function(results)
{
    //do whatever you want with the results
    console.log(results)
})
.catch(function(error)
{
   //do whatever when you get an error
   console.log(error)
})
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是sql.input('inputField1', sql.VarChar, myFirstInput)@inputField1使用名为 的变量更改为myFirstInput@inputField2with也会发生同样的事情mySecondInput

这将有助于它免受 SQL 注入


Goo*_*tan -5

你可以像这样使用尝试

var id = 1234

var query = (SQL
            `SELECT fname, lname, email
             FROM users
             WHERE id = ${id}`
            )

var sql = require('./db.js');
sql.query("select * from table where field1 = ${field1val} or field2 = ${field2val} ", [field1val, field2val], function (error, results) {
   if(error){
       //handle error
   }
   else{
      //handle the results
   } 
}
Run Code Online (Sandbox Code Playgroud)