如何在 libpqxx / C++ 的准备 SQL 语句中将参数绑定在引号内
How to bind parameters inside quotes in prepared SQL statement for libpqxx / C++
我有一个 PostGIS 扩展 PotgreSQL 数据库,我想知道如何使用 pqxx::connection_base::prepare
创建一个带有 PostGIS 函数的 SQL 语句,例如 [=16] =].
当我像这样向 PostgreSQL 查询 SQL 语句时:
database_name=# select st_geomfromtext('POINT(50.0 90.0)', 4326);
我收到回复:
st_geomfromtext
----------------------------------------------------
0101000020E610000000000000000049400000000000805640
如何使用 C++ 在 libpqxx 上获取上述代码?
我试过:
#include <iostream>
#include <pqxx/pqxx>
int main()
{
try {
pqxx::connection conn("dbname=xxx user=yyy password=zzz");
pqxx::work xaction(conn);
conn.prepare(
"text to geometry point",
"select st_geomfromtext('POINT( )', 4326);"
);
pqxx::result selected = xaction.prepared("text to geometry point")(50.0)(90.0).exec();
for (auto row : selected) {
for (auto col : row) {
std::cout << col.c_str() << "\t";
}
std::cout << "\n";
}
std::cout << std::endl;
conn.disconnect();
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return 1;
}
return 0;
}
但是出现错误:
ERROR: bind message supplies 2 parameters, but prepared statement "text to geometry point" requires 0
libpqxx 可能无法解析'POINT( )'
因为里面的参数引用为文本,所以绑定参数失败。
我不知道如何修复错误。
这是我想要做的简单示例。实际工作中需要用到pqxx::connection_base::prepare
</code> 不被解释为参数,而是字符串文字,因为它在单引号内。</p>
<p>尝试</p>
<pre><code>'POINT(' || || ' ' || || ')'
我有一个 PostGIS 扩展 PotgreSQL 数据库,我想知道如何使用 pqxx::connection_base::prepare
创建一个带有 PostGIS 函数的 SQL 语句,例如 [=16] =].
当我像这样向 PostgreSQL 查询 SQL 语句时:
database_name=# select st_geomfromtext('POINT(50.0 90.0)', 4326);
我收到回复:
st_geomfromtext
----------------------------------------------------
0101000020E610000000000000000049400000000000805640
如何使用 C++ 在 libpqxx 上获取上述代码?
我试过:
#include <iostream>
#include <pqxx/pqxx>
int main()
{
try {
pqxx::connection conn("dbname=xxx user=yyy password=zzz");
pqxx::work xaction(conn);
conn.prepare(
"text to geometry point",
"select st_geomfromtext('POINT( )', 4326);"
);
pqxx::result selected = xaction.prepared("text to geometry point")(50.0)(90.0).exec();
for (auto row : selected) {
for (auto col : row) {
std::cout << col.c_str() << "\t";
}
std::cout << "\n";
}
std::cout << std::endl;
conn.disconnect();
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
return 1;
}
return 0;
}
但是出现错误:
ERROR: bind message supplies 2 parameters, but prepared statement "text to geometry point" requires 0
libpqxx 可能无法解析'POINT( )'
因为里面的参数引用为文本,所以绑定参数失败。
我不知道如何修复错误。
这是我想要做的简单示例。实际工作中需要用到pqxx::connection_base::prepare
</code> 不被解释为参数,而是字符串文字,因为它在单引号内。</p>
<p>尝试</p>
<pre><code>'POINT(' || || ' ' || || ')'