Reputation: 2460
I have created this function to insert data into database:
void add_data_to_db(){
const char *data[2][2] = {"2","e"};
re = PQexecParams(connection,
"INSERT INTO test_table "\
"VALUES ($1, $2);",
2,NULL,data[2],NULL,NULL,0);
if(PQresultStatus(re) != PGRES_TUPLES_OK){
printf("%s\n", PQresultErrorMessage(re));
}
PQclear(re);
}
but when I run the program it prints :
ERROR: invalid byte sequence for encoding "UTF8": 0x80
as far as I know this problem occurs when we have null value adding to table but I have not.
Upvotes: 2
Views: 442
Reputation: 247665
It should be const char *data[2]
, and the function call should have data
rather than data[2]
.
The error message means that PostgreSQL encountered bytes that are not part of a correctly encoded UTF-8 string.
Upvotes: 1
Reputation: 16156
According to the documentation the fifth argument of PQExecParams
should be const char * const *paramValues
... so a pointer to constant pointers which point to constant char
. The documentation specifies that it should point to an array of the specified (in the third argument) length (2 here).
data[2]
is the third element of the data
array (whoops, it has only two elements!).
data
would decay to a pointer to the first element; that is a pointer to an array of two pointers which each point to a string. Exactly what you need.
Upvotes: 2