• mysql的mysql_store_result函数调用问题(C的API)


     问题背景:mysql查询数据时,如果未查询到数据,却进行了后续对数据的操作,会导致段错误,如果在生产状态下,可能会导致服务器崩溃死机。

    解决办法:

            向mysql查询数据时,不管能否查询到数据mysql_real_query()函数都会返回0,所以通过mysql_real_query()无法得知是否查询成功,我的解决办法是使用mysql_store_result()来判定是否查询到数据。

            但是网上对mysql_store_result()的返回值的说法简直是误人子弟,有说法是判断返回值为NULL,则没有查询到数据。有的说返回值是0代表成功,非零失败。

            但是查看myql.h的源码看到mysql_store_result()返回值是一个结构体指针,除非因为结构体指针申请失败,返回值才会为空。这和是否的得到数据完全无关。

    代码实现:(可能实现的很low大佬请绕路)

    方法一:

    MYSQL_RES *res;

    if(mysqL_real_query(mysql_conn,cmd,sizeof(cmd)))

    {

            return -1;

    }

    res = mysql_store_result(mysql_conn);

    if(res == NULL || strlen(res->data) < 2)

    {

            return -1;

    }

    注意:strlen(res->data) < 2 主要是这个判断产生的作用,返回的数据在res->data,但是实际操作的时候,如果没有查询到数据res->data也不为空,判断是否小于2即可

    方法二:

    if(mysqL_real_query(mysql_conn,cmd,sizeof(cmd)))

    {

            return -1;

    }

    res = mysql_store_result(mysql_conn);

    if(res == NULL )

    {

            return -1;

    }

    int rows = mysql_num_rows(res);

    if(rows == 0)        //通过判断所得的返回行数判断是否有查询到的数据

    {

            mysql_free_result(res);

            return -1;

    }

  • 相关阅读:
    小游戏外包开发流程及费用
    Dubbo基本用法-Dubbo Provider配置
    人工智能基础-Python之Pandas库教程
    设计模式 - 责任链模式
    Spring MVC中@InitBinder注解是如何应用的?
    数据分析总结
    【LeetCode】Day148-目标和
    sora生成高质量视频的原理
    Java Spring Cloud XXIII 之 配置中心
    关于fifo和ram时序验证
  • 原文地址:https://blog.csdn.net/qq_41937509/article/details/126146607