ZBLOG

int db_read_img(MYSQL *mysql, char *buffer) { if (mysql == NULL || buffer == NULL) return -1; const char *sql = "select u_img from tbl_user where u_name='gam';"; // 预处理 sql 语句 MYSQL_STMT *stmt = mysql_stmt_init(mysql); int r...

根据你提供的代码,可能存在以下问题:

  1. mysql_stmt_store_result():在存储结果集之前,需要使用mysql_stmt_store_result()函数将结果集存储到客户端。但是在你的代码中,并没有检查返回值是否为0。建议添加错误处理来确保结果集被正确存储。

  2. 数据读取循环:在while循环中,你使用了mysql_stmt_fetch_column()来获取数据。然而,在每次迭代时,你都将result.buffer_length设置为1。这意味着每次只会读取1个字节的数据,并且没有进行累加操作。所以最终写入文件的内容将只包含最后一个字节的数据。

针对上述问题,可以尝试修改代码如下:

while (1) {
    ret = mysql_stmt_fetch(stmt);
    if (ret) break; // 如果发生错误或遍历完成,则退出循环

    result.buffer_length = size; // 将缓冲区长度设置为整个图片大小

    // 从 result.buffer 中直接获取图片数据
    ret = mysql_stmt_fetch_column(stmt, &result, 0, offset);
    if (ret) {
        printf("mysql_stmt_fetch_column, %s\n", mysql_error(mysql));
        mysql_stmt_close(stmt);
        return -6;
    }

    offset += size;
}

// 在 write_img 函数中直接传入 size 参数即可
write_img("a.png", buffer, size);

通过以上改动,应该能够正确地将图片数据写入文件 “a.png” 中。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=16736

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?