【问题标题】:error: column "age" does not exist [node + pg + postgres]错误:列“年龄”不存在 [node + pg + postgres]
【发布时间】:2016-07-06 07:57:16
【问题描述】:

您好,我正在尝试使用 node.js 中的 pg 对我的数据库进行 INSERT,但我有一个 错误:“年龄”列不存在。

这是我的代码:

    app.post('/saving', function(req, res){
  var age = req.param('Age');
  var gender = req.param('gender');
  //res.send(age + gender)
  pool.connect(function(err, client, done){
    if(err) {
      return res.send('error')
    }
    client.query('INSERT INTO  public.attack (age, gender) VALUES (age , gender)')

    done()
  })
})

这里是我的数据库:

    test=# \d attack;
                              Table "public.attack"
 Column |       Type        |                      Modifiers                      
--------+-------------------+-----------------------------------------------------
 age    | integer           | 
 gender | character varying | 
 id     | integer           | not null default nextval('attack_id_seq'::regclass)
Indexes:
    "attack_pkey" PRIMARY KEY, btree (id)

【问题讨论】:

  • INSERT INTO public.attack (age, gender) VALUES (age, gender) 正是您的数据库将看到的,因为它不知道您的 JavaScript 中有哪些变量。
  • 好的问题已解决,但现在当我发布浏览器时仍处于待处理状态(无限)。
  • 如果您提出一个新问题,其中包含代码的详细信息以及发生的情况,SO (StackOverflow) 社区很乐意为您提供帮助!

标签: node.js postgresql


【解决方案1】:

agegender 内部 VALUES (age, gender) 不会被定义,就 postgres 而言。在这种情况下,您需要使用prepared statement(或者更具体地说是参数化查询)将变量与查询一起传递。

我相信这可能与您想要的代码相似:

let sql = 'INSERT INTO public.attack (age, gender) VALUES ($1, $2)';
let params = [ age, gender ];
client.query(sql, params, function(err) {
  // make sure you handle errors from here as well,
  // including signaling `res` and `done`
});

【讨论】:

  • 具体来说,你的意思是agegender不会被插入到请求中吗?
  • 取决于您所说的插值 - 是的,您必须确保直接提供值,因为 postgres 不知道 javascript 代码中的内容。我强烈建议使用参数化查询。我已经更新为包含一个示例以及指向 postgres 驱动程序文档的链接。
  • 就我个人而言,我不熟悉 Node.js 和 DB,但是是的,这基本上就是我的意思。
猜你喜欢
  • 1970-01-01
  • 2012-03-26
  • 2021-08-10
  • 2015-10-13
  • 2013-12-15
  • 2015-07-18
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
相关资源
最近更新 更多