libqp 调用PQexec程序崩溃

mngluer 2016-12-29 09:32:56
1.读出文件数据,调用PQescapeBytea 函数转义,在组装成sql 语句,用PQexec函数执行,程序崩溃。
2.读出文件数据,把文件内容转成 base64 编码,调用PQescapeBytea 函数转义,在组装成sql 语句,用PQexec函数执行,执 行成功。

请问 各位大虾 1. 是什么原因导致崩溃的,

PGconn *con = NULL;
PGresult *res = NULL;

//const char *connectinfo = "hostadd=127.0.0.1 port=5432"
//con = PQconnectdb(connectinfo);

con = PQsetdbLogin("127.0.0.1", "5432", NULL, NULL, "puc", "postgres", "123456");
if (con == NULL)
{
return;
}

ConnStatusType conType = PQstatus(con);
if (conType != CONNECTION_OK)
{
LogPrintf(con, conType, "PQsetdbLogin");
return;
}


char *tmp_filePath = "D:\\carkey.docx";
//char *tmp_filePath = "D:\\aa.txt";
//char *tmp_filePath = "D:\\sssss.docx";

FILE *fp = NULL;
unsigned int iTotalLen = 0;
fp = fopen(tmp_filePath, "rb");
if (fp == NULL)
{
return;
}

fseek(fp, 0, SEEK_END);
iTotalLen = ftell(fp);

fseek(fp, 0, SEEK_SET);

char *pData = (char *)malloc(iTotalLen + 1);
if (pData == NULL)
{
Quit(con);
return;
}
memset(pData, 0, iTotalLen + 1);
fread(pData, 1, iTotalLen, fp);

// int iBase64Len = 4 * iTotalLen / 3 + (((iTotalLen % 3) == 0) ? 0 : 4);
// char *pBase64str = (char *)malloc(iBase64Len);
// if (pBase64str == NULL)
// {
// if (pData)
// {
// free(pData);
// pData = NULL;
// }
// return;
// }
// memset(pBase64str, 0, iBase64Len);
// int ret = stringtoBase64String(pData, iTotalLen, pBase64str, iBase64Len);
// if (ret == 0)
// {
// if (pData)
// {
// free(pData);
// pData = NULL;
// }
// if (pBase64str)
// {
// free(pBase64str);
// pBase64str = NULL;
// }
// return;
// }

char *pTransfor = (char *)malloc(iTotalLen * 2 + 1);
//char *pTransfor = (char *)malloc(iBase64Len * 2 + 1);
if (pTransfor == NULL)
{
if (pData)
{
free(pData);
pData = NULL;
}
Quit(con);
return;
}
memset(pTransfor, 0, 2 * iTotalLen + 1);
//memset(pTransfor, 0, 2 * iBase64Len + 1);

unsigned char* pTmp = PQescapeBytea((const unsigned char *)pData, iTotalLen, (size_t *)pTransfor);
//unsigned char* pTmp = PQescapeBytea((const unsigned char *)pBase64str, iBase64Len, (size_t *)pTransfor);

char *pSQL = (char *)malloc(2*iTotalLen + 1024);
//char *pSQL = (char *)malloc(2 * iBase64Len + 1024);
if (pSQL == NULL)
{
if (pData)
{
free(pData);
pData = NULL;
}

if (pTransfor)
{
free(pTransfor);
pTransfor = NULL;
}
Quit(con);
return;
}

memset(pSQL, 0, 2 * iTotalLen + 1024);
//memset(pSQL, 0, 2 * iBase64Len + 1024);
sprintf(pSQL, "insert into dbo.t_fax_outbox_file values('%d', '%s');", g_iIdex++, pTmp);
res = PQexec(con, pSQL);
if (res && PQresultStatus(res) == PGRES_COMMAND_OK)
{
GetByteaData(con);
}
else
{
}
...全文
318 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mngluer 2017-01-18
  • 打赏
  • 举报
回复
期间出差了,回来调用 pqparam 函数,插入数据成功了。

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧