【问题标题】:insert into table values from array从数组插入表值
【发布时间】:2016-09-15 06:12:24
【问题描述】:

我想从数组中插入表值。

var theFields = 
    "my_id,"+ 
    "fruit,"+...

var theData = [
    my_id,
    req.body.fruit,...
     ]

我能做到:

client.query("INSERT INTO theTable("+ theFields +") values($1,$2,$3,$4,$5,$6,$7,$8,$9,...." +

但我想避免“$1,$2..so on”

所以,我试过了:

client.query("INSERT INTO theTable("+ theFields +")  values($1::varchar[])",[theData], function(err, result) {

client.query("INSERT INTO theTable("+ theFields +")  values ANY($1::varchar[])",[theData], function(err, result) {

但它们不起作用。

注意,字段的类型相同,varchar。

(另外,如果我有不同的类型,有没有办法使用我正在尝试的解决方案来实现这一点?)

【问题讨论】:

  • 这是个坏主意,因为变量为字符串提供了适当的转义,同时也防止了 SQL 注入。

标签: javascript node.js database postgresql


【解决方案1】:

您可以以编程方式编写字符串$1,$2,...。我假设 theData 数组的长度等于查询中的字段数:

var values = theData.map(function(f, i) {
    return "$" + (i + 1);
}).join();
client.query("INSERT INTO theTable(" + theFields + ")  values(" + values + ")", ...

【讨论】:

  • :它给TypeError: theFields.map is not a function`
  • :在查询中,在values(" + values + ")", 之后我应该有values(" + values + ")",theData,function(err,result){ 还是[theData],function(err,result){ 或其他东西,因为它挂起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
相关资源
最近更新 更多