gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:19 24 4
gpt4 key购买 nike

我将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com