如何在C中的PQexecParams()中使用多个变量

时间:2016-10-01 00:45:30

标签: c postgresql-9.5

我尝试创建客户端/服务器应用程序,但是我在服务器应用程序中遇到了一个问题。我希望服务器应用程序接受来自客户端应用程序的包含多个变量的结构,然后在" INSERT INTO"中使用这些变量值。 psql语句。但是,正如标题所暗示的那样,我对如何编写代码存在疑问。下面,您将找到我的代码的相关部分:

if not dd:

我一直在我声明变量值的行上得到编译错误,这让我相信我不能在PQexecParams()函数的这一行声明多个值。我觉得我的方式是错的,所以你们能请我指出正确的方向吗?是否可以在一个PQexecParams()语句中的Value行上声明多个值?如果我将这三个值分解为它们自己的PQexecParams()语句,数据库将创建三个单独的条目,而不是只有一个。

非常感谢你们迄今为止为我提供的所有帮助!

1 个答案:

答案 0 :(得分:2)

可以这样做,但不是你想要的方式。 PostgreSQL文档将该函数的签名定义为

PGresult *PQexecParams(PGconn *conn,
                       const char *command,
                       int nParams,
                       const Oid *paramTypes,
                       const char * const *paramValues,
                       const int *paramLengths,
                       const int *paramFormats,
                       int resultFormat);

您不能在函数调用中添加额外的参数,并希望它能够理解您;这不是C的工作方式。但是,如果我们查看该签名,我们会看到值以

的形式传递
const char * const *paramValues,

如果我们假装无法看到const关键字,则这是一个char**,可以作为char*的数组传入。

尝试按如下所示创建数组,然后将其传递到您尝试传入多个字段的位置。

char* values[3];
values[0] = buffer->person.fname;
values[1] = buffer->person.lname;
values[2] = buffer->person.age;

注意 - 这段代码假设所有三个字段都是char *,我认为这是一个非常大的假设“#age;#39;如果是int,您将不得不弄清楚如何将其转换为字符串,或者如何使用该函数提供的二进制模式。我认为这超出了这个问题的范围。