【问题标题】:postgresql queries give error when inserting arrays with strings插入带有字符串的数组时,postgresql 查询会出错
【发布时间】:2016-08-10 11:30:33
【问题描述】:

我有一个简单的查询,打算在我的 postgresql 9.5 数据库的表中插入一行:

client.query('INSERT INTO "GRIDs" (idname, status, playerid, playerready) VALUES (\'' + gameRoomID + '\', 0, ARRAY[\'\',\'\',\'\',\'\'], ARRAY[0,0,0,0]);', function(err, data) {
    if(err) {
        throw new Error('Error inserting game room ID ' + gameRoomID);
    };
});

但是,由于未知原因,字符串数组 (ARRAY[\'\',\'\',\'\',\'\']) 会导致错误,因为如果我将其从查询中删除相应的 playerid 列,查询工作正常。我尝试了以下变体,结果都相同:
ARRAY["\'\'","\'\'","\'\'","\'\'"] (用双引号将每个值括起来)
ARRAY["","","",""](只用双引号)
ARRAY[,,,](只是空的)
以及花括号的各种类似符号,但即使是编号数组,这些符号似乎也很烦人,所以我倾向于避免使用这些符号。

我做错了什么?

【问题讨论】:

  • 错误信息是什么,playerid列的数据类型是什么?
  • 手动查询转义始终是灾难的根源。您应该依赖库中的自动查询格式。查看pg-promise,它可以自动格式化任何东西(包括混合内容)的数组。

标签: node.js postgresql


【解决方案1】:

如果这些是字符串数组,你必须声明你的类型。

也可以使用美元引号或双引号。

 ARRAY[''''::text, '''''', ...]

请注意,您的数据库驱动程序应该为您执行此转义操作。自己做这件事是解决 sql 注入问题的好方法。

【讨论】:

  • 非常感谢。美元引用它(导致 ARRAY[$$\'\'$$,$$\'\'$$,$$\'\'$$,$$\'\'$$])解决了这个问题。由于表已经使用 pgAdmin 创建,并且列的数据类型已经是字符变量 [],因此没有必要为每个值分配类型。
猜你喜欢
  • 2018-06-16
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 2020-03-30
  • 2020-06-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
相关资源
最近更新 更多