如何使用libpq库和C 绑定无效的语句

How can I bind a NULL value to a prepared statements with libpq library and C++?

本文关键字:无效 语句 绑定 何使用 libpq 库和      更新时间:2023-10-16

我必须使用libpq库,而不是libpqxx,我找不到在准备好的语句中绑定数字类型的null值。我尝试了null或null,甚至使用",但它没有起作用。

...
std::string statements = "insert into ipls_troubleticketerrorreport2 (CUSTOMER, NETWORK,SELECTABLEMONTH, ERRORCODE,ERRORMESSAGE, TTID ) " 
                             "values ($1, $2, to_date($3,'DD.MM.YYYY'), $4, $5, $6);";
for (int i=0; i< sqlParametersWithValue.size();i++)
    {
        char NULLstr[] = "NULL";
        if ((sqlParametersWithValue[i].second) == "")
        {
            paramValues[i] = NULLstr;
        }
        else
        {       
            paramValues[i] = &(*(sqlParametersWithValue[i].second).c_str());
        }
    }


pgres =  PQexecParams(pgconn,statements.c_str(), sqlParametersWithValue.size() , NULL, paramValues, NULL, NULL, 0);

您将其传递给包含" null"的字符串,而不是实际的空指针。

paramValues[i] = NULL;
paramValues[i] = nullptr; // If using C++

https://www.postgresql.org/docs/9.1/libpq-exec.html

paramValues[]
指定参数的实际值。此数组中的空指针表示相应的参数为null;否则,指针指向零终止的文本字符串(用于文本格式(或服务器期望的格式(用于二进制格式(的二进制数据。