0

我正在使用 libpqxx 和准备好的语句,当我尝试以编程方式插入时它失败并出现错误“无效几何”,但我可以通过 sql 提示符执行相同的插入。我错过了什么吗?我试图在prepare语句调用中转义'但同样的错误

con.prepare("chat_insert", "INSERT INTO chat values (nextval('chat_seq'), $1, ST_GeomFromText('POINT($2 $3)', 4326), $4)");
worker.prepared("chat_insert")(chatid)(lon)(lat)(msg).exec();
worker.commit();

我也试过

con.prepare("chat_insert", "INSERT INTO chat values (nextval('chat_seq'), $1, ST_GeomFromText(\'POINT($2 $3)\', 4326), $4)");

输出:

Chat id: chat:user:128946234
Lat: 14.6049
Lon: 121.033
ERROR:  parse error - invalid geometry
HINT:  "POINT(" <-- parse error at position 6 within geometry

如果我进入 sql 提示符,我可以运行它,它会插入

insert into chat values (nextval('chat_seq'), 'chat:user:128946234', ST_GeomFromText('POINT(121.033 14.6049)', 4326), 'This is a test msg....');
4

1 回答 1

0

您正在尝试解析POINT($2 $3)其中包含美元符号的 WKT 字符串。在这种情况下,这些不是参数,因为 WKT 是一个字符串。

使用接受数字参数的函数,例如ST_MakePoint(x, y)

con.prepare("chat_insert", "INSERT INTO chat (chatid, geom, msg) "
            "VALUES ($1, ST_SetSRID(ST_MakePoint($2, $3), 4326), $4)");

请注意,我列出了要在之后插入的列chat,这被认为是最佳实践。

于 2014-08-13T22:32:50.173 回答