【问题标题】:How to pass parameter to mssql query in node js如何将参数传递给节点js中的sql查询
【发布时间】:2020-03-10 02:37:18
【问题描述】:

我正在将应用程序的数据库从 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
   } 
}

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

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

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

【问题讨论】:

  • 请分享您的 db.js 脚本,以便我们知道您的 sql.query 函数中发生了什么
  • sql.query("select * from table where field1 = "+field1val+" or field2 = "+field2val, function (error, results) {

标签: mysql node.js sql-server


【解决方案1】:

我做这样的参数化 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)
})

这里发生的是sql.input('inputField1', sql.VarChar, myFirstInput) 将用名为myFirstInput 的变量替换@inputField1@inputField2mySecondInput 也会发生同样的事情。

这将有助于它从 SQL 注入

【讨论】:

  • 每次查询后输入是否“重置”?
  • @workwise 只要在每次查询时为“myFirstInput”和“mySecondInput”分配不同的变量,那么每次调用函数时输入的值都会不同。
【解决方案2】:
var sql = require('./db.js');
sql.query(`select * from table where field1 = ${field1val} or field2 = ${field2val}`, function (error, results) {
   if(error){
       //handle error
   }
   else{
      //handle the results
   } 
}

我认为,它适合你:)

【讨论】:

【解决方案3】:

你可以这样尝试

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
   } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 2013-08-02
    • 2015-04-25
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多