1

我可以通过有一些弱点的字符串操作来更新表中的记录。
所以,现在我尝试使用参数进行更新,但这并没有像我想象的那样进行。

sprintf(sql, "%s%s%s%s%s%d%s",
    "UPDATE ", mytable, " SET ",
    "my_id=$0, mystr1=$1, mystr2=$2, myint=$3, mydouble=$4",
    "WHERE my_id='", local_my_id, "'");

const char *values[5] =
{local_my_id, local_mystr1, local_mystr2, local_myint, local_mydouble};

result = PQexecParams(conn, sql, 5, NULL, values,  NULL,  NULL, 0);

值 1 和 4 是整数,值 5 是不适合 const char 数组的两倍。
我只用字符串尝试相同的方法,它可以工作。

如果我必须将数字转换为看起来不合逻辑的字符串。

如何正确执行此操作?

4

1 回答 1

2

需要将数字转换为字符串似乎不合逻辑,但这正是您使用默认“文本”协议时必须做的事情。考虑使用library libpqtypes它会为您处理很多此类细节。

您可以使用二进制协议(在逐个参数的基础上,请参阅文档PQexecParams)...但通常您最好使用文本协议。它在网络上实际上通常更快,特别是对于许多小数字,如果您使用文本协议,您不必担心字节顺序和数字格式问题。

于 2013-06-05T13:26:10.250 回答