我是靠谱客的博主 高兴星月,最近开发中收集的这篇文章主要介绍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;

}

最后

以上就是高兴星月为你收集整理的mysql的mysql_store_result函数调用问题(C的API)的全部内容,希望文章能够帮你解决mysql的mysql_store_result函数调用问题(C的API)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部