使用原始 Sequelize 查询的替换:避免单引号?

rop*_*der 5 javascript mysql sql node.js sequelize.js

这可能有一个非常简单的答案,但我没有看到它。

我想使用 Sequelize 进行原始查询

var sequelize = require('sequelize');
sequelize
   .query("LOAD DATA LOCAL INFILE :file
           INTO TABLE :table
           FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';",
          null,
          {raw:true},
          {file: datasetPath, table: "dataset_" + datasetName})
Run Code Online (Sandbox Code Playgroud)

问题在于,替换字符串包含用于:file替换(这很好,因为它是路径)和:table替换(这很糟糕,因为它只是应该是一个未经修饰的表名,并且会破坏查询)的单引号。在表名替换的情况下如何避免这些引号?

谢谢。

bak*_*vic 0

如果您确定datasetName永远不会包含任何 SQL 注入的可能性,您可以直接将表名插入查询中,如下所示:

sequelize
   .query("LOAD DATA LOCAL INFILE :file
           INTO TABLE dataset_" + datasetName + "
           FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';",
          null,
          {raw:true}, {file: datasetPath})
Run Code Online (Sandbox Code Playgroud)

mwarren 发布的评论在这种情况下并没有真正起作用 - Sequelize 看到它是一个正在插入的字符串,并相应地对其进行转义。