嵌入式web&sqlite3

调试sqlite3数据库,通过web查询数据库时,出现了下面两种现象:

1.查询6分钟间隔的数据,返回 502 BadGateway

这里写图片描述

2.查询10分钟间隔的数据,最后数据不全(查询1小时数据同样的情况)
这里写图片描述

3.分析:从502 BadGateway入手,之前调试CGI程序时,出现这个错误基本都是 内存溢出 的问题,查看源代码:

int select_flow_info_difftime(sqlite3 *db,char *table,char *time_start,char *time_end)
{
    char sql[100];
    char* errmsg;
    assert(db);
    assert(table);
    g_RowD = 0;
    int limits = 0;

    _process_data_info *p_ProcessDataInfo = NULL;
    p_ProcessDataInfo = GetProcessDataInfo();

    limits = p_ProcessDataInfo->m_ucBehindDotCount*1440*2;

    sprintf(sql,"select * from %s where timer>='%s' and timer<'%s' order by timer asc limit %d",table,time_start,time_end,limits);
    if(sqlite3_exec(db,sql,callbackDetF,NULL,&errmsg)!=SQLITE_OK)
    {
        fprintf(cgiOut,"%s/%s:%d error:%s\n",__FILE__,__FUNCTION__,__LINE__,errmsg);
        sqlite3_free((void*)errmsg);
        return 0;
    }
    return g_RowD;
}

这里注意到了char sql[100],直观感觉是这个数组访问溢出了,修改为char sql[256],重新编译,执行,上面两个问题全部解决。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值