我正在使用节点js 0.10.12对postgreSQL 9.1执行查询。
当我尝试执行error invalid input synatx for integer: "{39}"
查询时,我收到错误update
(39是示例数字)
我看不出有什么问题。有什么建议吗?
这是我在前端的代码(片段)
//this is global
var gid=0;
//set websockets to search - works fine
var sd = new WebSocket("ws://localhost:0000");
sd.onmessage = function (evt)
{
//get data, parse it, because there is more than one vars, pass id to gid
var received_msg = evt.data;
var packet = JSON.parse(received_msg);
var tid = packet['tid'];
gid=tid;
}
//when user clicks button, set websockets to send id and other data, to perform update query
var sa = new WebSocket("ws://localhost:0000");
sa.onopen = function(){
sa.send(JSON.stringify({
command:'typesave',
indi:gid,
name:document.getElementById("typename").value,
}));
sa.onmessage = function (evt) {
alert("Saved");
sa.close;
gid=0;//make gid 0 again, for re-use
}
后端(查询)
var query=client.query("UPDATE type SET t_name=$1,t_color=$2 WHERE t_id = $3 ",[name, color, indi])
query.on("row", function (row, result) {
result.addRow(row);
});
query.on("end", function (result) {
connection.send("o");
client.end();
});
为什么这不起作用且数字无法识别?
提前致谢
答案 0 :(得分:0)
正如人们对初始问题的预期,您的数据库驱动程序将一个成员的整数数组发送到整数字段。 PostgreSQL正确拒绝数据并返回错误。 PostgreSQL术语中的'{39}'
与使用数组构造函数的ARRAY[39]
和JSON中的[39]
完全等效。
现在,显然您可以更改查询调用以从JSON数组中提取第一个项目。并发送它而不是整个数组,但我会担心如果事情发生变化并且你得到多个值会发生什么。您可能希望将此逻辑分离出来用于此数据结构。