gpt4 book ai didi

c++ - 将数值绑定(bind)到准备好的 SQL 的正确方法

转载 作者:行者123 更新时间:2023-11-30 17:26:01 25 4
gpt4 key购买 nike

我没有使用过 libpq-fe(postgresql-9.1.3)

PGresult * pg_res;
char * sql = "INSERT INTO tbGroups (Group_UID, Full_Name, User_UID) VALUES ($1, $2, $3);";
int group_uid = 11;
int user_uid = 1;
const char * name = "TEST1";
const char * values[3] = {(const char *) &group_uid, name, (const char *) &user_uid};
int lengths[3] = {sizeof(group_uid), strlen(name), sizeof(user_uid)};
int format[3] = {1, 1, 1};

pg_res = PQprepare(conn, "insert_tbgroups", sql, 3, NULL);
PQclear(pg_res);

pg_res = PQexecPrepared(conn, "insert_tbgroups", 3, values, lengths, format, 1);
PQclear(pg_res);

有效,但结果是:

rcpdv=# select group_uid, full_name, user_uid from tbGroups; group_uid |   full_name   | user_uid -----------+---------------+---------- 184549376 | TEST1         | 16777216(1 rows)

在没有 param_types 的情况下将数值绑定(bind)到准备好的 SQL 的正确方法是什么?

最佳答案

PostgreSQL 期望数据通过网络连接传输。因此,您必须将数值数据转换为网络格式(大端)。我通常使用 ntohl() 函数,作为您案例中的一个粗略示例:

int format[3] = {1, 1, 1};

for (i = 0; i < 3; ++i) {
format[i] = ntohl(format[i]);
}

关于c++ - 将数值绑定(bind)到准备好的 SQL 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911855/

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