c++ - C++中的PQexecParams,查询错误

标签 c++ postgresql

我将 pqlib 与 postgresql 版本 9.1.11 一起使用

我有以下代码

const char *spid = std::to_string(pid).c_str();
PGresult   *res;
const char *paramValues[2] = {u->getID().c_str(), spid};
std::string table;
table = table.append("public.\"").append(Constants::USER_PATTERNS_TABLE).append("\"");
std::string param_name_pid = Constants::RELATION_TABLE_PATTERN_ID;
std::string param_name_uid = Constants::RELATION_TABLE_USER_ID;
std::string command = Constants::INSERT_COMMAND + table + " (" + param_name_uid + ", " + param_name_pid + ")  VALUES ($1, $2::int)";
std::cout << "command: " << command << std::endl;
res = PQexecParams(conn, command.c_str(), 2, NULL, paramValues, NULL, NULL,0);

在哪里

  • INSERT_COMMAND = "INSERT INTO "(字符串)

  • USER_PATTERN_TABLE = "User_Patterns"(字符串)

  • RELATION_TABLE_PATTERN_ID = "pattern_id"(字符串)

  • RELATION_TABLE_USER_ID = "user_id"(字符串)

  • pid = 一个整数

  • u->getID() = 一个字符串

  • conn = 与数据库的连接

表“User_Patterns”定义为

CREATE TABLE "User_Patterns"(
    user_id    TEXT references public."User" (id) ON UPDATE CASCADE ON DELETE CASCADE
    ,pattern_id BIGSERIAL references public."Pattern" (id) ON UPDATE CASCADE
    ,CONSTRAINT user_patterns_pkey PRIMARY KEY (user_id,pattern_id)  -- explicit pk
)WITH (
    OIDS=FALSE
);

我已经将用户和模式加载到各自的表中。

生成的命令是:

INSERT INTO public."User_Patterns" (user_id, pattern_id)  VALUES ($1, $2::int)

我也试过 $2, $2::bigint, $2::int4

问题是:

我收到错误:

ERROR:  invalid input syntax for integer: "public.""

我已经使用 PQexecParams 来存储用户和模式,唯一的区别是它们都有文本/xml 字段(模式上唯一的 int 字段是一个序列字段,我不存储它我自己的值(value)),但因为 user_patterns 是一个关系表,我需要为 pattern_id 存储和 int。

我已经阅读了 pqlib 的文档并看到了示例,两者都没有用。

最佳答案

问题出在以下几行:

const char *spid = std::to_string(pid).c_str();
const char *paramValues[2] = {u->getID().c_str(), spid};

std::to_string(pid) 创建临时字符串,.c_str() 返回指向该字符串内部表示的指针,该指针在行,导致死指针。您可能还会看到问题的答案 stringstream::str copy lifetime

关于c++ - C++中的PQexecParams,查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560925/

相关文章:

python - 如何解决此 Psycopg 错误消息(python)

java - Spring Data java 配置找不到 org.postgresql.Driver

postgresql - 减少 postgresql 日志的详细程度

postgresql - 允许远程连接 postgresql

c++ - QT undefined reference 错误(Qextserialport)

c++如何使用子类调用函数,具有父类(super class)指针

c# - 是否有支持混合 C++ 和 C# 应用程序的崩溃报告服务?

C++ 从基类中的非虚函数调用纯虚函数

r - 在 OSX 中使用共享库安装 R - 缺少 liblzma 库

c++ - 可执行文件中的 "Hide"文件 (C++)