2

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.

Amir reza Riahi
  • 1,540
  • 2
  • 8
  • 34

2 Answers2

2

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.

Daniel Jour
  • 15,896
  • 2
  • 36
  • 63
1

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.

Laurenz Albe
  • 209,280
  • 17
  • 206
  • 263